home *** CD-ROM | disk | FTP | other *** search
/ Online Today 2000 January / Onto0100.iso / pc / Browser / HTML Kurse / selfhtml / zmazescr.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-10-14  |  38.8 KB  |  2,610 lines

  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Rectangle;
  4. import java.util.Date;
  5.  
  6. class zmazescr extends Thread {
  7.    private static final int NUM_COLORS = 16;
  8.    private static final int TOP_COLOR = 12;
  9.    private static final int RECTANGLE_SE_NW_COLOR = 10;
  10.    private static final int TRIANGLE_SSE_NNW_COLOR = 9;
  11.    private static final int TRIANGLE_SE_NW_COLOR = 8;
  12.    private static final int RECTANGLE_W_E_COLOR = 7;
  13.    private static final int FLOOR_COLOR = 6;
  14.    private static final int TRIANGLE_SW_NE_COLOR = 5;
  15.    private static final int RECTANGLE_SW_NE_COLOR = 4;
  16.    private static final int TRIANGLE_SSW_NNE_COLOR = 3;
  17.    private static final int BACKOUT_COLOR = 13;
  18.    private static final int ADVANCE_COLOR = 14;
  19.    private static final int SOLUTION_COLOR = 15;
  20.    private static final double RELATIVE_WIDTH_OF_WALL = (double)0.25F;
  21.    private static final double RELATIVE_HEIGHT_OF_WALL = (double)2.0F;
  22.    private static final double MIN_WALL_LENGTH_IN_INCHES = (double)0.25F;
  23.    private static final double SECONDS_FOR_MAZE_SELECTION = (double)0.25F;
  24.    private static final int[] SUBSTITUTION_HIGH = new int[]{4, 1, 2, 8, 8, 9, 9, 6, 5, 7, 2, 1, 2, 9, 8, 8, 6, 3, 5, 1, 9, 5, 4, 4, 9, 8, 6, 0, 8, 0, 6, 0, 2, 4, 1, 9, 2, 0, 7, 4, 7, 3, 0, 0, 2, 6, 8, 9, 4, 0, 8, 3, 2, 3, 2, 5, 2, 4, 6, 9, 7, 9, 1, 3, 5, 7, 1, 1, 4, 5, 8, 1, 6, 0, 5, 7, 8, 2, 3, 3, 7, 3, 5, 1, 7, 5, 4, 0, 3, 6, 3, 7, 7, 1, 9, 4, 0, 5, 6, 6};
  25.    private static final int[] SUBSTITUTION_LOW = new int[]{1, 2, 2, 1, 5, 5, 4, 6, 4, 6, 4, 4, 5, 6, 6, 3, 0, 9, 6, 5, 7, 2, 0, 9, 3, 4, 2, 3, 9, 1, 9, 9, 9, 3, 8, 9, 3, 4, 1, 5, 0, 5, 2, 7, 0, 8, 8, 0, 4, 5, 0, 3, 6, 8, 1, 7, 8, 8, 7, 1, 3, 2, 7, 7, 1, 8, 0, 3, 7, 5, 2, 6, 4, 0, 9, 9, 7, 7, 4, 6, 2, 0, 0, 1, 7, 3, 6, 6, 1, 1, 2, 4, 5, 9, 8, 2, 8, 8, 3, 5};
  26.    private int adjacency;
  27.    public boolean alreadyPainting;
  28.    private zvertex[][] baseRectangle;
  29.    private zvertex[][] baseTriangle;
  30.    private boolean clearUserAttempts;
  31.    private char[][] computerPage;
  32.    private double cosTilt;
  33.    private int counter0;
  34.    private int counter1;
  35.    private int counter2;
  36.    private int counter3;
  37.    private int counter4;
  38.    private int counter5;
  39.    private int counter6;
  40.    private int counter7;
  41.    private Graphics graph;
  42.    private boolean hexagonalRooms;
  43.    private int[][] hexDeltaX;
  44.    private int[][] hexDeltaY;
  45.    private int maxX;
  46.    private int maxY;
  47.    private zmazecan zmazecan;
  48.    private boolean minimized;
  49.    private int numColumns;
  50.    private int numRoomsInMaze;
  51.    private int numRoomsInSolution;
  52.    private int numRows;
  53.    private boolean paint;
  54.    private double pixelsPerX;
  55.    private double pixelsPerZ;
  56.    public zvertex[][] rectangle;
  57.    private Color[] redGreenBlue;
  58.    private double relDistOfUserFromScreen;
  59.    private boolean resize;
  60.    public boolean restart;
  61.    private Rectangle screen;
  62.    private int[] seed;
  63.    private double sinTilt;
  64.    private boolean solutionDisplayed;
  65.    private int[][] sqrDeltaX;
  66.    private int[][] sqrDeltaY;
  67.    private double sqrt3;
  68.    private zstack[] stack;
  69.    public int state;
  70.    private double tilt;
  71.    public boolean userHasSolved;
  72.    private char[][] userPage;
  73.    private int userX;
  74.    private double userXRelative;
  75.    private int userY;
  76.    private double userYRelative;
  77.    // $FF: renamed from: x int
  78.    private int field_0;
  79.    private double xMax;
  80.    private double xOffset;
  81.    // $FF: renamed from: y int
  82.    private int field_1;
  83.    private double yMax;
  84.    private int yMod4;
  85.    private double yOffset;
  86.  
  87.    zmazescr(zmazecan var1) {
  88.       ((Thread)this).setDaemon(true);
  89.       this.zmazecan = var1;
  90.       this.restart = false;
  91.       this.hexagonalRooms = this.zmazecan.zmaze3d.hexagonalRooms;
  92.       this.clearUserAttempts = true;
  93.       this.state = 5;
  94.       this.baseRectangle = new zvertex[6][4];
  95.  
  96.       for(int var10 = 0; var10 < 6; ++var10) {
  97.          for(int var12 = 0; var12 < 4; ++var12) {
  98.             this.baseRectangle[var10][var12] = new zvertex();
  99.          }
  100.       }
  101.  
  102.       this.rectangle = new zvertex[6][4];
  103.  
  104.       for(int var18 = 0; var18 < 6; ++var18) {
  105.          for(int var20 = 0; var20 < 4; ++var20) {
  106.             this.rectangle[var18][var20] = new zvertex();
  107.          }
  108.       }
  109.  
  110.       this.baseTriangle = new zvertex[4][3];
  111.  
  112.       for(int var19 = 0; var19 < 4; ++var19) {
  113.          for(int var21 = 0; var21 < 3; ++var21) {
  114.             this.baseTriangle[var19][var21] = new zvertex();
  115.          }
  116.       }
  117.  
  118.       this.hexDeltaX = new int[6][720];
  119.       this.hexDeltaY = new int[6][720];
  120.       this.sqrDeltaX = new int[4][24];
  121.       this.sqrDeltaY = new int[4][24];
  122.       this.redGreenBlue = new Color[16];
  123.       this.computerPage = null;
  124.       this.userPage = null;
  125.       this.stack = null;
  126.       this.alreadyPainting = false;
  127.       this.solutionDisplayed = false;
  128.       this.userHasSolved = false;
  129.       this.minimized = false;
  130.       this.hexDeltaY[0][0] = -1;
  131.       this.hexDeltaX[0][0] = -2;
  132.       this.hexDeltaY[1][0] = 1;
  133.       this.hexDeltaX[1][0] = -2;
  134.       this.hexDeltaY[2][0] = -2;
  135.       this.hexDeltaX[2][0] = 0;
  136.       this.hexDeltaY[3][0] = 2;
  137.       this.hexDeltaX[3][0] = 0;
  138.       this.hexDeltaY[4][0] = -1;
  139.       this.hexDeltaX[4][0] = 2;
  140.       this.hexDeltaY[5][0] = 1;
  141.       this.hexDeltaX[5][0] = 2;
  142.       int var9 = 0;
  143.  
  144.       for(int var3 = 0; var3 < 6; ++var3) {
  145.          for(int var4 = 0; var4 < 6; ++var4) {
  146.             if (var3 != var4) {
  147.                for(int var5 = 0; var5 < 6; ++var5) {
  148.                   if (var3 != var5 && var4 != var5) {
  149.                      for(int var6 = 0; var6 < 6; ++var6) {
  150.                         if (var3 != var6 && var4 != var6 && var5 != var6) {
  151.                            for(int var7 = 0; var7 < 6; ++var7) {
  152.                               if (var3 != var7 && var4 != var7 && var5 != var7 && var6 != var7) {
  153.                                  for(int var8 = 0; var8 < 6; ++var8) {
  154.                                     if (var3 != var8 && var4 != var8 && var5 != var8 && var6 != var8 && var7 != var8) {
  155.                                        this.hexDeltaX[var3][var9] = this.hexDeltaX[0][0];
  156.                                        this.hexDeltaY[var3][var9] = this.hexDeltaY[0][0];
  157.                                        this.hexDeltaX[var4][var9] = this.hexDeltaX[1][0];
  158.                                        this.hexDeltaY[var4][var9] = this.hexDeltaY[1][0];
  159.                                        this.hexDeltaX[var5][var9] = this.hexDeltaX[2][0];
  160.                                        this.hexDeltaY[var5][var9] = this.hexDeltaY[2][0];
  161.                                        this.hexDeltaX[var6][var9] = this.hexDeltaX[3][0];
  162.                                        this.hexDeltaY[var6][var9] = this.hexDeltaY[3][0];
  163.                                        this.hexDeltaX[var7][var9] = this.hexDeltaX[4][0];
  164.                                        this.hexDeltaY[var7][var9] = this.hexDeltaY[4][0];
  165.                                        this.hexDeltaX[var8][var9] = this.hexDeltaX[5][0];
  166.                                        this.hexDeltaY[var8][var9++] = this.hexDeltaY[5][0];
  167.                                     }
  168.                                  }
  169.                               }
  170.                            }
  171.                         }
  172.                      }
  173.                   }
  174.                }
  175.             }
  176.          }
  177.       }
  178.  
  179.       this.sqrDeltaY[0][0] = 0;
  180.       this.sqrDeltaX[0][0] = -1;
  181.       this.sqrDeltaY[1][0] = 1;
  182.       this.sqrDeltaX[1][0] = 0;
  183.       this.sqrDeltaY[2][0] = 0;
  184.       this.sqrDeltaX[2][0] = 1;
  185.       this.sqrDeltaY[3][0] = -1;
  186.       this.sqrDeltaX[3][0] = 0;
  187.       var9 = 0;
  188.  
  189.       for(int var13 = 0; var13 < 4; ++var13) {
  190.          for(int var14 = 0; var14 < 4; ++var14) {
  191.             if (var13 != var14) {
  192.                for(int var15 = 0; var15 < 4; ++var15) {
  193.                   if (var13 != var15 && var14 != var15) {
  194.                      for(int var16 = 0; var16 < 4; ++var16) {
  195.                         if (var13 != var16 && var14 != var16 && var15 != var16) {
  196.                            this.sqrDeltaX[var13][var9] = this.sqrDeltaX[0][0];
  197.                            this.sqrDeltaY[var13][var9] = this.sqrDeltaY[0][0];
  198.                            this.sqrDeltaX[var14][var9] = this.sqrDeltaX[1][0];
  199.                            this.sqrDeltaY[var14][var9] = this.sqrDeltaY[1][0];
  200.                            this.sqrDeltaX[var15][var9] = this.sqrDeltaX[2][0];
  201.                            this.sqrDeltaY[var15][var9] = this.sqrDeltaY[2][0];
  202.                            this.sqrDeltaX[var16][var9] = this.sqrDeltaX[3][0];
  203.                            this.sqrDeltaY[var16][var9++] = this.sqrDeltaY[3][0];
  204.                         }
  205.                      }
  206.                   }
  207.                }
  208.             }
  209.          }
  210.       }
  211.  
  212.       this.sqrt3 = Math.sqrt((double)3.0F);
  213.  
  214.       for(int var2 = 0; var2 <= 12; ++var2) {
  215.          int var11 = 256 * var2 / 13;
  216.          this.redGreenBlue[var2] = new Color(var11, var11, var11);
  217.       }
  218.  
  219.       this.redGreenBlue[13] = new Color(255, 255, 0);
  220.       this.redGreenBlue[14] = new Color(0, 255, 0);
  221.       this.redGreenBlue[15] = new Color(255, 0, 0);
  222.    }
  223.  
  224.    private void drawQuadrilateral(zpoint[] var1, int var2) {
  225.       int[] var4 = new int[4];
  226.       int[] var5 = new int[4];
  227.  
  228.       for(int var3 = 0; var3 < 4; ++var3) {
  229.          var4[var3] = var1[var3].x;
  230.          var5[var3] = var1[var3].y;
  231.       }
  232.  
  233.       this.graph.setColor(this.redGreenBlue[var2]);
  234.       this.graph.fillPolygon(var4, var5, 4);
  235.    }
  236.  
  237.    private zpoint getCorner(double var1, double var3, double var5) {
  238.       double var10 = (this.yMax - var3) * this.cosTilt - var5 * this.sinTilt;
  239.       double var14 = (this.yMax - var3) * this.sinTilt + var5 * this.cosTilt;
  240.       double var12 = this.yMax / (double)2.0F + this.relDistOfUserFromScreen * (var14 - this.yMax / (double)2.0F) / (var10 + this.relDistOfUserFromScreen);
  241.       double var8 = this.xMax / (double)2.0F + this.relDistOfUserFromScreen * (var1 - this.xMax / (double)2.0F) / (var10 + this.relDistOfUserFromScreen);
  242.       var8 += this.xOffset;
  243.       zpoint var7 = new zpoint();
  244.       var7.x = (int)(this.pixelsPerX * var8);
  245.       var7.y = this.screen.height - (int)(this.pixelsPerZ * var12);
  246.       return var7;
  247.    }
  248.  
  249.    private void displayQuadrilateral(double var1, double var3, double var5, double var7, double var9, double var11, double var13, double var15, double var17, double var19, double var21, double var23, int var25) {
  250.       zpoint[] var26 = new zpoint[]{this.getCorner(var1, var3, var5), this.getCorner(var7, var9, var11), this.getCorner(var13, var15, var17), this.getCorner(var19, var21, var23)};
  251.       this.drawQuadrilateral(var26, var25);
  252.    }
  253.  
  254.    private void drawTriangle(zpoint[] var1, int var2) {
  255.       int[] var4 = new int[3];
  256.       int[] var5 = new int[3];
  257.  
  258.       for(int var3 = 0; var3 < 3; ++var3) {
  259.          var4[var3] = var1[var3].x;
  260.          var5[var3] = var1[var3].y;
  261.       }
  262.  
  263.       this.graph.setColor(this.redGreenBlue[var2]);
  264.       this.graph.fillPolygon(var4, var5, 3);
  265.    }
  266.  
  267.    private void displayTriangle(double var1, double var3, double var5, double var7, double var9, double var11, double var13, double var15, double var17, int var19) {
  268.       zpoint[] var20 = new zpoint[]{this.getCorner(var1, var3, var5), this.getCorner(var7, var9, var11), this.getCorner(var13, var15, var17)};
  269.       this.drawTriangle(var20, var19);
  270.    }
  271.  
  272.    private void outputTriangle(zvertex[] var1, boolean var2, int var3) {
  273.       if (var2) {
  274.          if (var1[1].x < this.xMax / (double)2.0F && var1[1].x > var1[0].x) {
  275.             double var4 = var1[2].x;
  276.             double var12 = var1[2].y;
  277.             double var6 = var1[1].x;
  278.             double var14 = var1[1].y;
  279.             double var8 = var1[1].x;
  280.             double var16 = var1[1].y;
  281.             double var10 = var1[2].x;
  282.             double var18 = var1[2].y;
  283.             this.displayQuadrilateral(var4, var12, (double)2.0F, var6, var14, (double)2.0F, var8, var16, (double)0.0F, var10, var18, (double)0.0F, 3);
  284.          }
  285.  
  286.          if (var1[1].x > this.xMax / (double)2.0F && var1[1].x < var1[2].x) {
  287.             double var20 = var1[1].x;
  288.             double var31 = var1[1].y;
  289.             double var23 = var1[0].x;
  290.             double var34 = var1[0].y;
  291.             double var26 = var1[0].x;
  292.             double var37 = var1[0].y;
  293.             double var29 = var1[1].x;
  294.             double var40 = var1[1].y;
  295.             this.displayQuadrilateral(var20, var31, (double)2.0F, var23, var34, (double)2.0F, var26, var37, (double)0.0F, var29, var40, (double)0.0F, 9);
  296.             return;
  297.          }
  298.       } else {
  299.          double var21 = var1[0].x;
  300.          double var32 = var1[0].y;
  301.          double var24 = var1[2].x;
  302.          double var35 = var1[2].y;
  303.          double var27 = var1[2].x;
  304.          double var38 = var1[2].y;
  305.          double var30 = var1[0].x;
  306.          double var41 = var1[0].y;
  307.          this.displayQuadrilateral(var21, var32, (double)2.0F, var24, var35, (double)2.0F, var27, var38, (double)0.0F, var30, var41, (double)0.0F, var3);
  308.          var21 = var1[0].x;
  309.          var32 = var1[0].y;
  310.          var24 = var1[1].x;
  311.          var35 = var1[1].y;
  312.          var27 = var1[2].x;
  313.          var38 = var1[2].y;
  314.          this.displayTriangle(var21, var32, (double)2.0F, var24, var35, (double)2.0F, var27, var38, (double)2.0F, 12);
  315.       }
  316.  
  317.    }
  318.  
  319.    private void outputRectangle(zvertex[] var1, int var2) {
  320.       double var3 = var1[3].x;
  321.       double var11 = var1[3].y;
  322.       double var5 = var1[2].x;
  323.       double var13 = var1[2].y;
  324.       double var7 = var1[2].x;
  325.       double var15 = var1[2].y;
  326.       double var9 = var1[3].x;
  327.       double var17 = var1[3].y;
  328.       this.displayQuadrilateral(var3, var11, (double)2.0F, var5, var13, (double)2.0F, var7, var15, (double)0.0F, var9, var17, (double)0.0F, var2);
  329.       var3 = var1[0].x;
  330.       var11 = var1[0].y;
  331.       var5 = var1[1].x;
  332.       var13 = var1[1].y;
  333.       var7 = var1[2].x;
  334.       var15 = var1[2].y;
  335.       var9 = var1[3].x;
  336.       var17 = var1[3].y;
  337.       this.displayQuadrilateral(var3, var11, (double)2.0F, var5, var13, (double)2.0F, var7, var15, (double)2.0F, var9, var17, (double)2.0F, 12);
  338.    }
  339.  
  340.    private void outputLeftRight(zvertex[] var1) {
  341.       if ((double)2.0F * var1[0].x > this.xMax) {
  342.          double var2 = var1[0].x;
  343.          double var10 = var1[0].y;
  344.          double var4 = var1[3].x;
  345.          double var12 = var1[3].y;
  346.          double var6 = var1[3].x;
  347.          double var14 = var1[3].y;
  348.          double var8 = var1[0].x;
  349.          double var16 = var1[0].y;
  350.          this.displayQuadrilateral(var2, var10, (double)2.0F, var4, var12, (double)2.0F, var6, var14, (double)0.0F, var8, var16, (double)0.0F, 10);
  351.       }
  352.  
  353.       if ((double)2.0F * var1[1].x < this.xMax) {
  354.          double var18 = var1[2].x;
  355.          double var22 = var1[2].y;
  356.          double var19 = var1[1].x;
  357.          double var23 = var1[1].y;
  358.          double var20 = var1[1].x;
  359.          double var24 = var1[1].y;
  360.          double var21 = var1[2].x;
  361.          double var25 = var1[2].y;
  362.          this.displayQuadrilateral(var18, var22, (double)2.0F, var19, var23, (double)2.0F, var20, var24, (double)0.0F, var21, var25, (double)0.0F, 4);
  363.       }
  364.  
  365.    }
  366.  
  367.    private void drawLine(double var1, double var3, double var5, double var7) {
  368.       zpoint var13 = this.getCorner(var1, var3, (double)2.0F);
  369.       int var9 = var13.x;
  370.       int var11 = var13.y;
  371.       var13 = this.getCorner(var5, var7, (double)2.0F);
  372.       int var10 = var13.x;
  373.       int var12 = var13.y;
  374.       this.graph.drawLine(var9, var11, var10, var12);
  375.    }
  376.  
  377.    private void hash() {
  378.       int var2 = this.counter0;
  379.       int var3 = this.counter1;
  380.       int var4 = this.counter2;
  381.       int var5 = this.counter3;
  382.       int var6 = this.counter4;
  383.       int var7 = this.counter5;
  384.       int var8 = this.counter6;
  385.       int var9 = this.counter7;
  386.  
  387.       for(int var1 = 8; var1 > 0; --var1) {
  388.          int var10 = 10 * var3 + var2;
  389.          int var11 = SUBSTITUTION_LOW[var10];
  390.          int var12 = SUBSTITUTION_HIGH[var10];
  391.          var10 = 10 * var5 + var4;
  392.          var2 = SUBSTITUTION_LOW[var10];
  393.          int var13 = SUBSTITUTION_HIGH[var10];
  394.          var10 = 10 * var7 + var6;
  395.          var4 = SUBSTITUTION_LOW[var10];
  396.          var3 = SUBSTITUTION_HIGH[var10];
  397.          var10 = 10 * var9 + var8;
  398.          var7 = SUBSTITUTION_LOW[var10];
  399.          var9 = SUBSTITUTION_HIGH[var10];
  400.          var5 = var11;
  401.          var8 = var12;
  402.          var6 = var13;
  403.       }
  404.  
  405.       this.counter0 = var2;
  406.       this.counter1 = var3;
  407.       this.counter2 = var4;
  408.       this.counter3 = var5;
  409.       this.counter4 = var6;
  410.       this.counter5 = var7;
  411.       this.counter6 = var8;
  412.       this.counter7 = var9;
  413.    }
  414.  
  415.    private void increment() {
  416.       int var1 = this.counter0 + 1;
  417.       if (var1 <= 9) {
  418.          this.counter0 = var1;
  419.       } else {
  420.          this.counter0 = 0;
  421.          var1 = this.counter1 + 1;
  422.          if (var1 <= 9) {
  423.             this.counter1 = var1;
  424.          } else {
  425.             this.counter1 = 0;
  426.             var1 = this.counter2 + 1;
  427.             if (var1 <= 9) {
  428.                this.counter2 = var1;
  429.             } else {
  430.                this.counter2 = 0;
  431.                var1 = this.counter3 + 1;
  432.                if (var1 <= 9) {
  433.                   this.counter3 = var1;
  434.                } else {
  435.                   this.counter3 = 0;
  436.                   var1 = this.counter4 + 1;
  437.                   if (var1 <= 9) {
  438.                      this.counter4 = var1;
  439.                   } else {
  440.                      this.counter4 = 0;
  441.                      var1 = this.counter5 + 1;
  442.                      if (var1 <= 9) {
  443.                         this.counter5 = var1;
  444.                      } else {
  445.                         this.counter5 = 0;
  446.                         var1 = this.counter6 + 1;
  447.                         if (var1 <= 9) {
  448.                            this.counter6 = var1;
  449.                         } else {
  450.                            this.counter6 = 0;
  451.                            var1 = this.counter7 + 1;
  452.                            if (var1 <= 9) {
  453.                               this.counter7 = var1;
  454.                            } else {
  455.                               this.counter7 = 0;
  456.                            }
  457.                         }
  458.                      }
  459.                   }
  460.                }
  461.             }
  462.          }
  463.       }
  464.    }
  465.  
  466.    public void hexKey(int var1) {
  467.       int var6 = 0;
  468.       double var4 = (double)0.0F;
  469.       double var7 = (double)0.0F;
  470.       boolean var2 = true;
  471.       int var3 = this.userX + this.hexDeltaX[var1][0];
  472.       if (var3 <= 0) {
  473.          var2 = false;
  474.       } else if (var3 >= this.maxX) {
  475.          var2 = false;
  476.       } else {
  477.          var6 = this.userY + this.hexDeltaY[var1][0];
  478.       }
  479.  
  480.       if (var6 <= 0) {
  481.          var2 = false;
  482.       } else if (var6 > this.maxY) {
  483.          var2 = false;
  484.       } else if (this.userPage[var6][var3] == 0) {
  485.          var2 = false;
  486.       }
  487.  
  488.       if (var2) {
  489.          var3 += this.hexDeltaX[var1][0];
  490.          var6 += this.hexDeltaY[var1][0];
  491.          if (var6 < this.maxY) {
  492.             if (this.userPage[var6][var3] == 1) {
  493.                this.graph.setColor(this.redGreenBlue[13]);
  494.                this.userPage[this.userY][this.userX] = 3;
  495.             } else {
  496.                this.graph.setColor(this.redGreenBlue[14]);
  497.                this.userPage[var6][var3] = 1;
  498.             }
  499.  
  500.             switch (var6 - this.userY) {
  501.                case -4:
  502.                   var4 = this.userXRelative;
  503.                   var7 = this.userYRelative - this.sqrt3;
  504.                   break;
  505.                case -2:
  506.                   if (var3 > this.userX) {
  507.                      var4 = this.userXRelative + (double)1.5F;
  508.                      var7 = this.userYRelative - this.sqrt3 / (double)2.0F;
  509.                   } else {
  510.                      var4 = this.userXRelative - (double)1.5F;
  511.                      var7 = this.userYRelative - this.sqrt3 / (double)2.0F;
  512.                   }
  513.                   break;
  514.                case 2:
  515.                   if (var3 > this.userX) {
  516.                      var4 = this.userXRelative + (double)1.5F;
  517.                      var7 = this.userYRelative + this.sqrt3 / (double)2.0F;
  518.                   } else {
  519.                      var4 = this.userXRelative - (double)1.5F;
  520.                      var7 = this.userYRelative + this.sqrt3 / (double)2.0F;
  521.                   }
  522.                   break;
  523.                default:
  524.                   var4 = this.userXRelative;
  525.                   var7 = this.userYRelative + this.sqrt3;
  526.             }
  527.  
  528.             this.drawLine(this.userXRelative, this.userYRelative, var4, var7);
  529.          } else {
  530.             this.graph.setColor(this.redGreenBlue[14]);
  531.             this.drawLine(this.userXRelative, this.userYRelative, this.userXRelative, this.yMax);
  532.             this.userHasSolved = true;
  533.          }
  534.  
  535.          this.userX = var3;
  536.          this.userY = var6;
  537.          this.userXRelative = var4;
  538.          this.userYRelative = var7;
  539.       }
  540.  
  541.    }
  542.  
  543.    public void hexDisplayUserMoves() {
  544.       double var6 = (double)0.0F;
  545.       int var10 = 2;
  546.       double var13 = this.sqrt3 / (double)2.0F;
  547.  
  548.       for(boolean var2 = false; var10 < this.maxY; var10 += 2) {
  549.          int var3;
  550.          if (var2) {
  551.             var3 = 7;
  552.             var6 = (double)2.5F;
  553.          } else {
  554.             var3 = 3;
  555.             var6 = (double)1.0F;
  556.          }
  557.  
  558.          while(var3 < this.maxX) {
  559.             if (this.userPage[var10][var3] == 1 || this.userPage[var10][var3] == 3) {
  560.                for(int var1 = 0; var1 < 6; ++var1) {
  561.                   int var4 = var3 + this.hexDeltaX[var1][0];
  562.                   int var11 = var10 + this.hexDeltaY[var1][0];
  563.                   if (this.userPage[var11][var4] != 0) {
  564.                      if (var11 == 0) {
  565.                         this.graph.setColor(this.redGreenBlue[14]);
  566.                         this.drawLine((double)1.0F, (double)0.0F, var6, var13);
  567.                      } else if (var11 == this.maxY) {
  568.                         if (this.userHasSolved) {
  569.                            this.graph.setColor(this.redGreenBlue[14]);
  570.                            double var15 = var13 + this.sqrt3 / (double)2.0F;
  571.                            this.drawLine(var6, var13, var6, var15);
  572.                         }
  573.                      } else {
  574.                         int var5 = var4 + this.hexDeltaX[var1][0];
  575.                         if (var5 > 0 && var5 < this.maxX) {
  576.                            int var12 = var11 + this.hexDeltaY[var1][0];
  577.                            if (var12 > 0 && var12 < this.maxY && (this.userPage[var12][var5] == 1 || this.userPage[var12][var5] == 3)) {
  578.                               if (this.userPage[var10][var3] == this.userPage[var12][var5]) {
  579.                                  if (this.userPage[var10][var3] == 1) {
  580.                                     this.graph.setColor(this.redGreenBlue[14]);
  581.                                  } else {
  582.                                     this.graph.setColor(this.redGreenBlue[13]);
  583.                                  }
  584.                               } else {
  585.                                  this.graph.setColor(this.redGreenBlue[13]);
  586.                               }
  587.  
  588.                               double var8;
  589.                               double var17;
  590.                               switch (var11 - var10) {
  591.                                  case -2:
  592.                                     var8 = var6;
  593.                                     var17 = var13 - this.sqrt3 / (double)2.0F;
  594.                                     break;
  595.                                  case -1:
  596.                                     if (var4 > var3) {
  597.                                        var8 = var6 + (double)0.75F;
  598.                                        var17 = var13 - this.sqrt3 / (double)4.0F;
  599.                                     } else {
  600.                                        var8 = var6 - (double)0.75F;
  601.                                        var17 = var13 - this.sqrt3 / (double)4.0F;
  602.                                     }
  603.                                     break;
  604.                                  case 0:
  605.                                  default:
  606.                                     var8 = var6;
  607.                                     var17 = var13 + this.sqrt3 / (double)2.0F;
  608.                                     break;
  609.                                  case 1:
  610.                                     if (var4 > var3) {
  611.                                        var8 = var6 + (double)0.75F;
  612.                                        var17 = var13 + this.sqrt3 / (double)4.0F;
  613.                                     } else {
  614.                                        var8 = var6 - (double)0.75F;
  615.                                        var17 = var13 + this.sqrt3 / (double)4.0F;
  616.                                     }
  617.                               }
  618.  
  619.                               this.drawLine(var6, var13, var8, var17);
  620.                            }
  621.                         }
  622.                      }
  623.                   }
  624.                }
  625.             }
  626.  
  627.             var6 += (double)3.0F;
  628.             var3 += 8;
  629.          }
  630.  
  631.          var2 = !var2;
  632.          var13 += this.sqrt3 / (double)2.0F;
  633.       }
  634.  
  635.       if (this.userHasSolved) {
  636.          this.graph.setColor(this.redGreenBlue[14]);
  637.          this.drawLine(var6, var13, var6, this.yMax);
  638.       }
  639.  
  640.    }
  641.  
  642.    private void hexSolveMaze() {
  643.       this.numRoomsInSolution = 1;
  644.       this.adjacency = 0;
  645.       int var4 = 3;
  646.       int var6 = 2;
  647.       int var3 = -1;
  648.       this.computerPage[var6][var4] = 1;
  649.       int var7 = 0;
  650.       int var5 = 0;
  651.  
  652.       label98:
  653.       while(true) {
  654.          int var8 = 0;
  655.          boolean var2 = false;
  656.  
  657.          while(true) {
  658.             while(var8 >= 6 || var2) {
  659.                if (!var2) {
  660.                   var8 = this.stack[var3].index1;
  661.                   this.computerPage[var6][var4] = 2;
  662.                   var4 -= this.hexDeltaX[var8][0];
  663.                   var6 -= this.hexDeltaY[var8][0];
  664.                   this.computerPage[var6][var4] = 2;
  665.                   var4 -= this.hexDeltaX[var8][0];
  666.                   var6 -= this.hexDeltaY[var8][0];
  667.                   --var3;
  668.                   ++var8;
  669.                }
  670.  
  671.                if (var2) {
  672.                   this.computerPage[var7][var5] = 1;
  673.                   var5 += this.hexDeltaX[var8][0];
  674.                   var7 += this.hexDeltaY[var8][0];
  675.                   if (var7 <= this.maxY) {
  676.                      ++var3;
  677.                      this.stack[var3].index1 = (short)var8;
  678.                      this.computerPage[var7][var5] = 1;
  679.                      var4 = var5;
  680.                      var6 = var7;
  681.                   }
  682.  
  683.                   if (var7 >= this.maxY) {
  684.                      break label98;
  685.                   }
  686.                   continue label98;
  687.                }
  688.             }
  689.  
  690.             var5 = var4 + this.hexDeltaX[var8][0];
  691.             var7 = var6 + this.hexDeltaY[var8][0];
  692.             if (this.computerPage[var7][var5] == 2) {
  693.                var2 = true;
  694.             } else {
  695.                ++var8;
  696.             }
  697.          }
  698.       }
  699.  
  700.       var4 = this.maxX - 3;
  701.       var6 = this.maxY - 2;
  702.  
  703.       for(this.adjacency = 0; var3 >= 0; ++this.numRoomsInSolution) {
  704.          for(int var9 = 0; var9 < 6; ++var9) {
  705.             var5 = var4 + this.hexDeltaX[var9][0];
  706.             var7 = var6 + this.hexDeltaY[var9][0];
  707.             if (this.computerPage[var7][var5] != 1 && this.computerPage[var7][var5] == 0) {
  708.                var5 += this.hexDeltaX[var9][0];
  709.                var7 += this.hexDeltaY[var9][0];
  710.                if (var5 < 0) {
  711.                   ++this.adjacency;
  712.                } else if (var5 > this.maxX) {
  713.                   ++this.adjacency;
  714.                } else if (var7 < 0) {
  715.                   ++this.adjacency;
  716.                } else if (var7 > this.maxY) {
  717.                   ++this.adjacency;
  718.                } else if (this.computerPage[var7][var5] == 1) {
  719.                   ++this.adjacency;
  720.                }
  721.             }
  722.          }
  723.  
  724.          var4 -= 2 * this.hexDeltaX[this.stack[var3].index1][0];
  725.          var6 -= 2 * this.hexDeltaY[this.stack[var3--].index1][0];
  726.       }
  727.  
  728.       for(int var10 = 0; var10 < 6; ++var10) {
  729.          var5 = var4 + this.hexDeltaX[var10][0];
  730.          var7 = var4 + this.hexDeltaY[var10][0];
  731.          if (this.computerPage[var7][var5] != 2 && this.computerPage[var7][var5] == 0) {
  732.             var5 += this.hexDeltaX[var10][0];
  733.             var7 += this.hexDeltaY[var10][0];
  734.             if (var5 < 0) {
  735.                ++this.adjacency;
  736.             } else if (var5 > this.maxX) {
  737.                ++this.adjacency;
  738.             } else if (var7 < 0) {
  739.                ++this.adjacency;
  740.             } else if (var7 > this.maxY) {
  741.                ++this.adjacency;
  742.             } else if (this.computerPage[var7][var5] == 1) {
  743.                ++this.adjacency;
  744.             }
  745.          }
  746.       }
  747.  
  748.    }
  749.  
  750.    private void hexGenerateMaze(int[] var1) {
  751.       int var18 = 0;
  752.       int var15 = 0;
  753.       int[] var6 = new int[]{var1[0] + 1, var1[1] + 1, var1[2] + 1, var1[3] + 1, var1[4] + 1, var1[5] + 1, var1[6] + 1, var1[7] + 1};
  754.       int var17 = 1;
  755.  
  756.       for(int var16 = 0; var16 <= this.maxY; ++var16) {
  757.          if (var17 == 1) {
  758.             int var33 = 1;
  759.  
  760.             for(int var30 = 0; var30 <= this.maxX; ++var30) {
  761.                if ((var33 != 0 || var16 == 0 || var16 == this.maxY) && var33 != 3 && var33 != 4 && var33 != 5) {
  762.                   this.computerPage[var16][var30] = 2;
  763.                } else {
  764.                   this.computerPage[var16][var30] = 0;
  765.                }
  766.  
  767.                ++var33;
  768.                if (var33 >= 8) {
  769.                   var33 = 0;
  770.                }
  771.             }
  772.          } else if (var17 != 0 && var17 != 2) {
  773.             int var32 = 1;
  774.  
  775.             for(int var29 = 0; var29 <= this.maxX; ++var29) {
  776.                if (var32 != 0 && var32 != 1 && var32 != 4 && var32 != 7) {
  777.                   this.computerPage[var16][var29] = 2;
  778.                } else {
  779.                   this.computerPage[var16][var29] = 0;
  780.                }
  781.  
  782.                ++var32;
  783.                if (var32 >= 8) {
  784.                   var32 = 0;
  785.                }
  786.             }
  787.          } else {
  788.             int var14 = 1;
  789.  
  790.             for(int var13 = 0; var13 <= this.maxX; ++var13) {
  791.                if (var14 != 2 && var14 != 6) {
  792.                   this.computerPage[var16][var13] = 2;
  793.                } else {
  794.                   this.computerPage[var16][var13] = 0;
  795.                }
  796.  
  797.                ++var14;
  798.                if (var14 >= 8) {
  799.                   var14 = 0;
  800.                }
  801.             }
  802.          }
  803.  
  804.          ++var17;
  805.          if (var17 >= 4) {
  806.             var17 = 0;
  807.          }
  808.       }
  809.  
  810.       int var2 = var6[0];
  811.       int var7 = 0;
  812.  
  813.       for(int var8 = 1; var8 < 8; var7 = var8++) {
  814.          int var12 = var6[var8];
  815.          var6[var7] = var12;
  816.          var2 += var12;
  817.          if (var2 >= 727) {
  818.             var2 -= 727;
  819.          }
  820.       }
  821.  
  822.       var6[7] = var2;
  823.       var2 %= this.numColumns;
  824.       int var31 = 4 * var2 + 3;
  825.       int var9 = var6[0];
  826.       var7 = 0;
  827.  
  828.       for(int var23 = 1; var23 < 8; var7 = var23++) {
  829.          int var27 = var6[var23];
  830.          var6[var7] = var27;
  831.          var9 += var27;
  832.          if (var9 >= 727) {
  833.             var9 -= 727;
  834.          }
  835.       }
  836.  
  837.       var6[7] = var9;
  838.       int var34;
  839.       if (var2 % 2 == 0) {
  840.          var9 %= this.numRows;
  841.          var34 = 4 * var9 + 2;
  842.       } else {
  843.          var9 %= this.numRows - 1;
  844.          var34 = 4 * var9 + 4;
  845.       }
  846.  
  847.       this.computerPage[var34][var31] = 2;
  848.       int var11 = -1;
  849.  
  850.       do {
  851.          int var20 = 0;
  852.  
  853.          int var4;
  854.          do {
  855.             var4 = var6[0];
  856.             var7 = 0;
  857.  
  858.             for(int var24 = 1; var24 < 8; var7 = var24++) {
  859.                int var28 = var6[var24];
  860.                var6[var7] = var28;
  861.                var4 += var28;
  862.                if (var4 >= 727) {
  863.                   var4 -= 727;
  864.                }
  865.             }
  866.  
  867.             var6[7] = var4;
  868.          } while(var4 >= 720);
  869.  
  870.          boolean var5 = false;
  871.  
  872.          for(boolean var10 = false; !var10; var10 = var5 || var11 == -1 && var20 >= 6) {
  873.             while(var20 < 6 && !var5) {
  874.                var15 = var31 + 2 * this.hexDeltaX[var20][var4];
  875.                if (var15 <= 0) {
  876.                   ++var20;
  877.                } else if (var15 > this.maxX) {
  878.                   ++var20;
  879.                } else {
  880.                   var18 = var34 + 2 * this.hexDeltaY[var20][var4];
  881.                   if (var18 <= 0) {
  882.                      ++var20;
  883.                   } else if (var18 > this.maxY) {
  884.                      ++var20;
  885.                   } else if (this.computerPage[var18][var15] == 0) {
  886.                      var5 = true;
  887.                   } else {
  888.                      ++var20;
  889.                   }
  890.                }
  891.             }
  892.  
  893.             if (!var5 && var11 >= 0) {
  894.                var20 = this.stack[var11].index1;
  895.                var4 = this.stack[var11--].index2;
  896.                var31 -= 2 * this.hexDeltaX[var20][var4];
  897.                var34 -= 2 * this.hexDeltaY[var20++][var4];
  898.             }
  899.          }
  900.  
  901.          if (var5) {
  902.             ++var11;
  903.             this.stack[var11].index1 = (short)var20;
  904.             this.stack[var11].index2 = (short)var4;
  905.             this.computerPage[var18][var15] = 2;
  906.             this.computerPage[(var34 + var18) / 2][(var31 + var15) / 2] = 2;
  907.             var31 = var15;
  908.             var34 = var18;
  909.          }
  910.       } while(var11 != -1);
  911.  
  912.       this.computerPage[0][3] = 1;
  913.       this.computerPage[this.maxY][this.maxX - 3] = 2;
  914.    }
  915.  
  916.    private void hexSelectMaze() {
  917.       byte var1 = 0;
  918.       byte var14 = 0;
  919.       int[] var16 = new int[8];
  920.       int[] var17 = new int[8];
  921.       int var2 = this.seed[0];
  922.       int var3 = this.seed[1];
  923.       int var4 = this.seed[2];
  924.       int var5 = this.seed[3];
  925.       int var6 = this.seed[4];
  926.       int var7 = this.seed[5];
  927.       int var8 = this.seed[6];
  928.       int var9 = this.seed[7];
  929.       this.hash();
  930.       int var13 = 4 * this.numRoomsInMaze + 1;
  931.       byte var15 = 0;
  932.       var17[0] = var2;
  933.       var17[1] = var3;
  934.       var17[2] = var4;
  935.       var17[3] = var5;
  936.       var17[4] = var6;
  937.       var17[5] = var7;
  938.       var17[6] = var8;
  939.       var17[7] = var9;
  940.       Date var10 = new Date();
  941.       double var18 = (double)var10.getTime() / (double)1000.0F;
  942.  
  943.       double var11;
  944.       do {
  945.          var16[0] = var2;
  946.          var16[1] = var3;
  947.          var16[2] = var4;
  948.          var16[3] = var5;
  949.          var16[4] = var6;
  950.          var16[5] = var7;
  951.          var16[6] = var8;
  952.          var16[7] = var9;
  953.          this.hexGenerateMaze(var16);
  954.          this.hexSolveMaze();
  955.          if (3 * var14 >= this.numRoomsInMaze) {
  956.             if (var1 < var13) {
  957.                var13 = var1;
  958.                var15 = var14;
  959.                var17[0] = var16[0];
  960.                var17[1] = var16[1];
  961.                var17[2] = var16[2];
  962.                var17[3] = var16[3];
  963.                var17[4] = var16[4];
  964.                var17[5] = var16[5];
  965.                var17[6] = var16[6];
  966.                var17[7] = var16[7];
  967.             } else if (var1 == var13 && var14 > var15) {
  968.                var15 = var14;
  969.                var17[0] = var16[0];
  970.                var17[1] = var16[1];
  971.                var17[2] = var16[2];
  972.                var17[3] = var16[3];
  973.                var17[4] = var16[4];
  974.                var17[5] = var16[5];
  975.                var17[6] = var16[6];
  976.                var17[7] = var16[7];
  977.             }
  978.          }
  979.  
  980.          this.increment();
  981.          var10 = new Date();
  982.          var11 = (double)var10.getTime() / (double)1000.0F - var18;
  983.       } while(var11 >= (double)0.0F && var11 < (double)0.25F);
  984.  
  985.       this.hexGenerateMaze(var17);
  986.       this.hexSolveMaze();
  987.    }
  988.  
  989.    public void hexDisplaySolution() {
  990.       double var6 = (double)1.0F;
  991.       double var13 = this.sqrt3 / (double)2.0F;
  992.       double var8 = (double)0.0F;
  993.       double var15 = (double)0.0F;
  994.       this.graph.setColor(this.redGreenBlue[15]);
  995.       this.drawLine((double)1.0F, (double)0.0F, var6, var13);
  996.       int var5 = 3;
  997.       int var12 = -2;
  998.       int var3 = 3;
  999.       int var10 = 2;
  1000.       int var4 = 0;
  1001.       int var11 = 0;
  1002.  
  1003.       do {
  1004.          boolean var2 = false;
  1005.          int var1 = 0;
  1006.  
  1007.          while(!var2) {
  1008.             var4 = var3 + this.hexDeltaX[var1][0];
  1009.             var11 = var10 + this.hexDeltaY[var1][0];
  1010.             if (this.computerPage[var11][var4] == 1) {
  1011.                var4 += this.hexDeltaX[var1][0];
  1012.                var11 += this.hexDeltaY[var1][0];
  1013.                if (var4 == var5 && var11 == var12) {
  1014.                   ++var1;
  1015.                } else {
  1016.                   var2 = true;
  1017.                }
  1018.             } else {
  1019.                ++var1;
  1020.             }
  1021.          }
  1022.  
  1023.          if (var11 < this.maxY) {
  1024.             switch (var11 - var10) {
  1025.                case -4:
  1026.                   var8 = var6;
  1027.                   var15 = var13 - this.sqrt3;
  1028.                   break;
  1029.                case -2:
  1030.                   if (var4 > var3) {
  1031.                      var8 = var6 + (double)1.5F;
  1032.                      var15 = var13 - this.sqrt3 / (double)2.0F;
  1033.                   } else {
  1034.                      var8 = var6 - (double)1.5F;
  1035.                      var15 = var13 - this.sqrt3 / (double)2.0F;
  1036.                   }
  1037.                   break;
  1038.                case 2:
  1039.                   if (var4 > var3) {
  1040.                      var8 = var6 + (double)1.5F;
  1041.                      var15 = var13 + this.sqrt3 / (double)2.0F;
  1042.                   } else {
  1043.                      var8 = var6 - (double)1.5F;
  1044.                      var15 = var13 + this.sqrt3 / (double)2.0F;
  1045.                   }
  1046.                   break;
  1047.                default:
  1048.                   var8 = var6;
  1049.                   var15 = var13 + this.sqrt3;
  1050.             }
  1051.  
  1052.             this.drawLine(var6, var13, var8, var15);
  1053.          } else {
  1054.             this.drawLine(var6, var13, var6, this.yMax);
  1055.          }
  1056.  
  1057.          var5 = var3;
  1058.          var12 = var10;
  1059.          var3 = var4;
  1060.          var10 = var11;
  1061.          var6 = var8;
  1062.          var13 = var15;
  1063.       } while(var11 < this.maxY);
  1064.  
  1065.    }
  1066.  
  1067.    private void hexOutputMaze() {
  1068.       zvertex[] var14 = new zvertex[4];
  1069.  
  1070.       for(int var26 = 0; var26 < 4; ++var26) {
  1071.          var14[var26] = new zvertex();
  1072.       }
  1073.  
  1074.       zvertex[] var15 = new zvertex[3];
  1075.  
  1076.       for(int var66 = 0; var66 < 3; ++var66) {
  1077.          var15[var66] = new zvertex();
  1078.       }
  1079.  
  1080.       zvertex[][] var25 = new zvertex[4][3];
  1081.  
  1082.       for(int var6 = 0; var6 < 4; ++var6) {
  1083.          for(int var67 = 0; var67 < 3; ++var67) {
  1084.             var25[var6][var67] = new zvertex();
  1085.          }
  1086.       }
  1087.  
  1088.       switch (this.state) {
  1089.          case 0:
  1090.             if (this.resize) {
  1091.                this.seed = new int[8];
  1092.                Date var24 = new Date();
  1093.                long var4 = var24.getTime();
  1094.  
  1095.                for(int var3 = 0; var3 < 8; ++var3) {
  1096.                   long var7 = var4 / 10L;
  1097.                   this.seed[var3] = (int)(var4 - 10L * var7);
  1098.                   var4 = var7;
  1099.                }
  1100.  
  1101.                double var16 = (double)this.screen.width * 0.28;
  1102.                double var18 = (double)0.25F;
  1103.                var18 *= 25.4;
  1104.                double var20 = (double)0.25F;
  1105.                this.numColumns = (int)((double)2.0F * (var16 / var18 - (double)2.0F - var20 / this.sqrt3) / (double)3.0F + (double)1.0F);
  1106.                if (this.numColumns % 2 == 0) {
  1107.                   --this.numColumns;
  1108.                }
  1109.  
  1110.                if (this.numColumns < 3) {
  1111.                   this.numColumns = 3;
  1112.                }
  1113.  
  1114.                var16 = (double)this.screen.height * 0.28;
  1115.                var18 = (double)this.screen.width * 0.28;
  1116.                var20 = (double)this.numColumns;
  1117.                double var22 = (double)0.25F;
  1118.                this.numRows = (int)((var16 / var18 * ((double)3.0F * (var20 - (double)1.0F) / (double)2.0F + (double)2.0F + var22 / this.sqrt3) - var22) / this.sqrt3);
  1119.                if (this.numRows < 2) {
  1120.                   this.numRows = 2;
  1121.                }
  1122.  
  1123.                this.maxX = 8 * (this.numColumns / 2) + 6;
  1124.                this.maxY = 4 * this.numRows;
  1125.                this.numRoomsInMaze = this.numRows * this.numColumns - this.numColumns / 2;
  1126.                this.computerPage = new char[this.maxY + 1][this.maxX + 1];
  1127.                this.userPage = new char[this.maxY + 1][this.maxX + 1];
  1128.                this.clearUserAttempts = true;
  1129.                this.stack = new zstack[this.numRoomsInMaze];
  1130.  
  1131.                for(int var13 = 0; var13 < this.numRoomsInMaze; ++var13) {
  1132.                   this.stack[var13] = new zstack();
  1133.                }
  1134.  
  1135.                this.hexSelectMaze();
  1136.                this.resize = false;
  1137.             }
  1138.  
  1139.             if (this.clearUserAttempts) {
  1140.                for(this.userX = 0; this.userX <= this.maxX; ++this.userX) {
  1141.                   for(this.userY = 0; this.userY <= this.maxY; ++this.userY) {
  1142.                      if (this.computerPage[this.userY][this.userX] == 0) {
  1143.                         this.userPage[this.userY][this.userX] = 0;
  1144.                      } else {
  1145.                         this.userPage[this.userY][this.userX] = 2;
  1146.                      }
  1147.                   }
  1148.                }
  1149.  
  1150.                this.userX = 3;
  1151.                this.userXRelative = (double)1.0F;
  1152.                this.userY = 2;
  1153.                this.userYRelative = this.sqrt3 / (double)2.0F;
  1154.                this.userPage[this.userY][this.userX] = 1;
  1155.                this.clearUserAttempts = false;
  1156.             }
  1157.  
  1158.             if (this.paint) {
  1159.                int[] var1 = new int[4];
  1160.                int[] var2 = new int[4];
  1161.                var1[0] = 0;
  1162.                var2[0] = 0;
  1163.                var1[1] = 0;
  1164.                var2[1] = this.screen.height;
  1165.                var1[2] = this.screen.width;
  1166.                var2[2] = this.screen.height;
  1167.                var1[3] = this.screen.width;
  1168.                var2[3] = 0;
  1169.                this.graph.setColor(new Color(255, 255, 255));
  1170.                this.graph.fillPolygon(var1, var2, 4);
  1171.                double var11 = Math.atan((double)1.0F) / (double)45.0F;
  1172.                double var9 = this.tilt * var11;
  1173.                this.sinTilt = Math.sin(var9);
  1174.                this.cosTilt = Math.cos(var9);
  1175.                double var59 = (double)this.numColumns;
  1176.                this.xMax = (double)3.0F * (var59 - (double)1.0F) / (double)2.0F + (double)2.0F + (double)0.25F / this.sqrt3;
  1177.                var59 = (double)this.screen.width;
  1178.                this.pixelsPerX = (var59 - (double)1.0F) / (this.xMax * (this.xMax / (this.xMax - (double)2.0F)));
  1179.                this.xOffset = this.xMax / (double)2.0F * ((double)2.0F / (this.xMax - (double)2.0F));
  1180.                var59 = (double)this.numRows;
  1181.                this.yMax = var59 * this.sqrt3 + (double)0.25F;
  1182.                var59 = (double)this.screen.height;
  1183.                this.pixelsPerZ = (var59 - (double)1.0F) / Math.sqrt(this.yMax * this.yMax + (double)4.0F);
  1184.                if (this.yMax > this.xMax) {
  1185.                   this.relDistOfUserFromScreen = this.yMax;
  1186.                } else {
  1187.                   this.relDistOfUserFromScreen = this.xMax;
  1188.                }
  1189.  
  1190.                this.paint = false;
  1191.             }
  1192.  
  1193.             if (this.state == 0) {
  1194.                this.state = 1;
  1195.                return;
  1196.             }
  1197.             break;
  1198.          case 1:
  1199.             this.baseTriangle[0][0].x = (double)0.0F;
  1200.             this.baseTriangle[0][0].y = (double)0.25F + this.sqrt3 / (double)2.0F;
  1201.             this.baseTriangle[0][1].x = (double)0.0F;
  1202.             this.baseTriangle[0][1].y = this.sqrt3 / (double)2.0F;
  1203.             this.baseTriangle[0][2].x = (double)0.25F * this.sqrt3 / (double)2.0F;
  1204.             this.baseTriangle[0][2].y = ((double)0.25F + this.sqrt3) / (double)2.0F;
  1205.             this.baseTriangle[1][0].x = ((double)1.0F - (double)0.25F / this.sqrt3) / (double)2.0F;
  1206.             this.baseTriangle[1][0].y = (double)0.125F;
  1207.             this.baseTriangle[1][1].x = (double)0.5F + (double)0.25F / this.sqrt3;
  1208.             this.baseTriangle[1][1].y = (double)0.0F;
  1209.             this.baseTriangle[1][2].x = this.baseTriangle[1][1].x;
  1210.             this.baseTriangle[1][2].y = (double)0.25F;
  1211.             this.baseTriangle[2][0].x = (double)1.5F;
  1212.             this.baseTriangle[2][0].y = (double)0.25F;
  1213.             this.baseTriangle[2][1].x = (double)1.5F;
  1214.             this.baseTriangle[2][1].y = (double)0.0F;
  1215.             this.baseTriangle[2][2].x = (double)1.5F * ((double)1.0F + (double)0.25F / this.sqrt3);
  1216.             this.baseTriangle[2][2].y = (double)0.125F;
  1217.             this.baseTriangle[3][0].x = (double)2.0F - (double)0.25F / ((double)2.0F * this.sqrt3);
  1218.             this.baseTriangle[3][0].y = this.baseTriangle[0][2].y;
  1219.             this.baseTriangle[3][1].x = (double)2.0F + (double)0.25F / this.sqrt3;
  1220.             this.baseTriangle[3][1].y = this.baseTriangle[0][1].y;
  1221.             this.baseTriangle[3][2].x = this.baseTriangle[3][1].x;
  1222.             this.baseTriangle[3][2].y = this.baseTriangle[0][0].y;
  1223.             this.baseRectangle[0][0].x = this.baseTriangle[0][2].x;
  1224.             this.baseRectangle[0][0].y = this.baseTriangle[0][2].y;
  1225.             this.baseRectangle[0][1].x = this.baseTriangle[1][1].x;
  1226.             this.baseRectangle[0][1].y = this.sqrt3;
  1227.             this.baseRectangle[0][2].x = this.baseTriangle[1][0].x;
  1228.             this.baseRectangle[0][2].y = this.sqrt3 + (double)0.125F;
  1229.             this.baseRectangle[0][3].x = this.baseTriangle[0][0].x;
  1230.             this.baseRectangle[0][3].y = this.baseTriangle[0][0].y;
  1231.             this.baseRectangle[1][0].x = this.baseTriangle[0][1].x;
  1232.             this.baseRectangle[1][0].y = this.baseTriangle[0][1].y;
  1233.             this.baseRectangle[1][1].x = this.baseTriangle[1][0].x;
  1234.             this.baseRectangle[1][1].y = this.baseTriangle[1][0].y;
  1235.             this.baseRectangle[1][2].x = this.baseTriangle[1][2].x;
  1236.             this.baseRectangle[1][2].y = this.baseTriangle[1][2].y;
  1237.             this.baseRectangle[1][3].x = this.baseTriangle[0][2].x;
  1238.             this.baseRectangle[1][3].y = this.baseTriangle[0][2].y;
  1239.             this.baseRectangle[2][0].x = this.baseTriangle[1][1].x;
  1240.             this.baseRectangle[2][0].y = this.baseTriangle[1][1].y;
  1241.             this.baseRectangle[2][1].x = this.baseTriangle[2][1].x;
  1242.             this.baseRectangle[2][1].y = this.baseTriangle[2][1].y;
  1243.             this.baseRectangle[2][2].x = this.baseTriangle[2][0].x;
  1244.             this.baseRectangle[2][2].y = this.baseTriangle[2][0].y;
  1245.             this.baseRectangle[2][3].x = this.baseTriangle[1][2].x;
  1246.             this.baseRectangle[2][3].y = this.baseTriangle[1][2].y;
  1247.             this.baseRectangle[3][0].x = this.baseTriangle[2][2].x;
  1248.             this.baseRectangle[3][0].y = this.baseTriangle[2][2].y;
  1249.             this.baseRectangle[3][1].x = this.baseTriangle[3][1].x;
  1250.             this.baseRectangle[3][1].y = this.baseTriangle[3][1].y;
  1251.             this.baseRectangle[3][2].x = this.baseTriangle[3][0].x;
  1252.             this.baseRectangle[3][2].y = this.baseTriangle[3][0].y;
  1253.             this.baseRectangle[3][3].x = this.baseTriangle[2][0].x;
  1254.             this.baseRectangle[3][3].y = this.baseTriangle[2][0].y;
  1255.             this.baseRectangle[4][0].x = this.baseTriangle[3][1].x;
  1256.             this.baseRectangle[4][0].y = this.baseTriangle[3][1].y;
  1257.             this.baseRectangle[4][1].x = this.baseTriangle[3][1].x + (this.baseTriangle[2][1].x - this.baseTriangle[1][1].x);
  1258.             this.baseRectangle[4][1].y = this.baseTriangle[3][1].y;
  1259.             this.baseRectangle[4][2].x = this.baseRectangle[4][1].x;
  1260.             this.baseRectangle[4][2].y = this.baseTriangle[3][2].y;
  1261.             this.baseRectangle[4][3].x = this.baseTriangle[3][2].x;
  1262.             this.baseRectangle[4][3].y = this.baseTriangle[3][2].y;
  1263.             this.baseRectangle[5][0].x = this.baseRectangle[0][1].x + (this.baseTriangle[2][1].x - this.baseTriangle[1][1].x);
  1264.             this.baseRectangle[5][0].y = this.baseRectangle[0][1].y;
  1265.             this.baseRectangle[5][1].x = this.baseTriangle[3][0].x;
  1266.             this.baseRectangle[5][1].y = this.baseTriangle[3][0].y;
  1267.             this.baseRectangle[5][2].x = this.baseTriangle[3][2].x;
  1268.             this.baseRectangle[5][2].y = this.baseTriangle[3][2].y;
  1269.             this.baseRectangle[5][3].x = this.baseRectangle[0][2].x + (this.baseTriangle[2][2].x - this.baseTriangle[1][0].x);
  1270.             this.baseRectangle[5][3].y = this.baseRectangle[0][2].y;
  1271.             this.rectangle[0][0].x = this.baseTriangle[1][1].x;
  1272.             this.rectangle[0][0].y = this.baseTriangle[1][1].y;
  1273.             this.rectangle[0][1].x = this.xMax - this.baseTriangle[1][1].x;
  1274.             this.rectangle[0][1].y = this.baseTriangle[1][1].y;
  1275.             this.rectangle[0][2].x = this.xMax - this.baseTriangle[1][2].x;
  1276.             this.rectangle[0][2].y = this.baseTriangle[1][2].y;
  1277.             this.rectangle[0][3].x = this.baseTriangle[1][2].x;
  1278.             this.rectangle[0][3].y = this.baseTriangle[1][2].y;
  1279.             this.rectangle[1][0].x = this.baseTriangle[0][1].x;
  1280.             this.rectangle[1][0].y = this.baseTriangle[0][1].y;
  1281.             this.rectangle[1][1].x = this.xMax - this.baseTriangle[0][1].x;
  1282.             this.rectangle[1][1].y = this.baseTriangle[0][1].y;
  1283.             this.rectangle[1][2].x = this.xMax - this.baseTriangle[1][2].x;
  1284.             this.rectangle[1][2].y = this.baseTriangle[1][2].y;
  1285.             this.rectangle[1][3].x = this.baseTriangle[1][2].x;
  1286.             this.rectangle[1][3].y = this.baseTriangle[1][2].y;
  1287.             this.rectangle[2][0].x = this.baseTriangle[0][1].x;
  1288.             this.rectangle[2][0].y = this.baseTriangle[0][1].y;
  1289.             this.rectangle[2][1].x = this.xMax - this.baseTriangle[0][1].x;
  1290.             this.rectangle[2][1].y = this.baseTriangle[0][1].y;
  1291.             this.rectangle[2][2].x = this.xMax - this.baseTriangle[0][0].x;
  1292.             this.rectangle[2][2].y = this.baseTriangle[0][0].y;
  1293.             this.rectangle[2][3].x = this.baseTriangle[0][0].x;
  1294.             this.rectangle[2][3].y = this.baseTriangle[0][0].y;
  1295.             this.rectangle[3][0].x = this.baseTriangle[0][0].x;
  1296.             this.rectangle[3][0].y = this.baseTriangle[0][0].y;
  1297.             this.rectangle[3][1].x = this.xMax - this.baseTriangle[0][0].x;
  1298.             this.rectangle[3][1].y = this.baseTriangle[0][0].y;
  1299.             this.rectangle[3][2].x = this.xMax - this.baseRectangle[0][1].x;
  1300.             this.rectangle[3][2].y = this.baseRectangle[0][1].y;
  1301.             this.rectangle[3][3].x = this.baseRectangle[0][1].x;
  1302.             this.rectangle[3][3].y = this.baseRectangle[0][1].y;
  1303.             this.field_1 = 0;
  1304.             this.state = 2;
  1305.             return;
  1306.          case 2:
  1307.             if (this.field_1 > this.maxY - 1) {
  1308.                this.rectangle[0][0].x = this.baseTriangle[1][0].x;
  1309.                this.rectangle[0][0].y = this.baseTriangle[1][0].y;
  1310.                this.rectangle[0][1].x = this.baseTriangle[1][1].x;
  1311.                this.rectangle[0][1].y = this.baseTriangle[1][1].y;
  1312.                this.rectangle[0][2].x = this.baseTriangle[2][1].x;
  1313.                this.rectangle[0][2].y = this.baseTriangle[2][1].y;
  1314.                this.rectangle[0][3].x = this.baseTriangle[2][2].x;
  1315.                this.rectangle[0][3].y = this.baseTriangle[2][2].y;
  1316.                this.rectangle[1][0].x = this.baseTriangle[0][1].x;
  1317.                this.rectangle[1][0].y = this.baseTriangle[0][1].y;
  1318.                this.rectangle[1][1].x = this.baseTriangle[1][0].x;
  1319.                this.rectangle[1][1].y = this.baseTriangle[1][0].y;
  1320.                this.rectangle[1][2].x = this.baseTriangle[2][2].x;
  1321.                this.rectangle[1][2].y = this.baseTriangle[2][2].y;
  1322.                this.rectangle[1][3].x = this.baseTriangle[3][1].x;
  1323.                this.rectangle[1][3].y = this.baseTriangle[3][1].y;
  1324.                this.rectangle[2][0].x = this.baseTriangle[0][0].x;
  1325.                this.rectangle[2][0].y = this.baseTriangle[0][0].y;
  1326.                this.rectangle[2][1].x = this.baseTriangle[0][1].x;
  1327.                this.rectangle[2][1].y = this.baseTriangle[0][1].y;
  1328.                this.rectangle[2][2].x = this.baseTriangle[3][1].x;
  1329.                this.rectangle[2][2].y = this.baseTriangle[3][1].y;
  1330.                this.rectangle[2][3].x = this.baseTriangle[3][2].x;
  1331.                this.rectangle[2][3].y = this.baseTriangle[3][2].y;
  1332.                this.field_0 = 0;
  1333.                this.state = 3;
  1334.                return;
  1335.             }
  1336.  
  1337.             if (this.field_1 > 0) {
  1338.                double var96 = this.rectangle[0][0].x;
  1339.                double var116 = this.rectangle[0][0].y;
  1340.                double var101 = this.rectangle[0][1].x;
  1341.                double var121 = this.rectangle[0][1].y;
  1342.                double var106 = this.rectangle[0][2].x;
  1343.                double var126 = this.rectangle[0][2].y;
  1344.                double var111 = this.rectangle[0][3].x;
  1345.                double var131 = this.rectangle[0][3].y;
  1346.                this.displayQuadrilateral(var96, var116, (double)0.0F, var101, var121, (double)0.0F, var106, var126, (double)0.0F, var111, var131, (double)0.0F, 6);
  1347.                var96 = this.rectangle[1][0].x;
  1348.                var116 = this.rectangle[1][0].y;
  1349.                var101 = this.rectangle[1][1].x;
  1350.                var121 = this.rectangle[1][1].y;
  1351.                var106 = this.rectangle[1][2].x;
  1352.                var126 = this.rectangle[1][2].y;
  1353.                var111 = this.rectangle[1][3].x;
  1354.                var131 = this.rectangle[1][3].y;
  1355.                this.displayQuadrilateral(var96, var116, (double)0.0F, var101, var121, (double)0.0F, var106, var126, (double)0.0F, var111, var131, (double)0.0F, 6);
  1356.             }
  1357.  
  1358.             double var98 = this.rectangle[2][0].x;
  1359.             double var118 = this.rectangle[2][0].y;
  1360.             double var103 = this.rectangle[2][1].x;
  1361.             double var123 = this.rectangle[2][1].y;
  1362.             double var108 = this.rectangle[2][2].x;
  1363.             double var128 = this.rectangle[2][2].y;
  1364.             double var113 = this.rectangle[2][3].x;
  1365.             double var133 = this.rectangle[2][3].y;
  1366.             this.displayQuadrilateral(var98, var118, (double)0.0F, var103, var123, (double)0.0F, var108, var128, (double)0.0F, var113, var133, (double)0.0F, 6);
  1367.             if (this.field_1 < this.maxY - 4) {
  1368.                var98 = this.rectangle[3][0].x;
  1369.                var118 = this.rectangle[3][0].y;
  1370.                var103 = this.rectangle[3][1].x;
  1371.                var123 = this.rectangle[3][1].y;
  1372.                var108 = this.rectangle[3][2].x;
  1373.                var128 = this.rectangle[3][2].y;
  1374.                var113 = this.rectangle[3][3].x;
  1375.                var133 = this.rectangle[3][3].y;
  1376.                this.displayQuadrilateral(var98, var118, (double)0.0F, var103, var123, (double)0.0F, var108, var128, (double)0.0F, var113, var133, (double)0.0F, 6);
  1377.             }
  1378.  
  1379.             for(int var57 = 0; var57 < 4; ++var57) {
  1380.                for(int var89 = 0; var89 < 4; ++var89) {
  1381.                   zvertex var141 = this.rectangle[var57][var89];
  1382.                   var141.y += this.sqrt3;
  1383.                }
  1384.             }
  1385.  
  1386.             this.field_1 += 4;
  1387.             return;
  1388.          case 3:
  1389.             if (this.field_0 > this.maxX) {
  1390.                this.yMod4 = 0;
  1391.                this.yOffset = (double)0.0F;
  1392.                this.field_1 = 0;
  1393.                this.state = 4;
  1394.                return;
  1395.             }
  1396.  
  1397.             for(int var56 = 0; var56 < 3; ++var56) {
  1398.                double var28 = this.rectangle[var56][0].x;
  1399.                double var36 = this.rectangle[var56][0].y;
  1400.                double var30 = this.rectangle[var56][1].x;
  1401.                double var38 = this.rectangle[var56][1].y;
  1402.                double var32 = this.rectangle[var56][2].x;
  1403.                double var40 = this.rectangle[var56][2].y;
  1404.                double var34 = this.rectangle[var56][3].x;
  1405.                double var42 = this.rectangle[var56][3].y;
  1406.                this.displayQuadrilateral(var28, var36, (double)0.0F, var30, var38, (double)0.0F, var32, var40, (double)0.0F, var34, var42, (double)0.0F, 6);
  1407.                var28 = this.rectangle[var56][0].x;
  1408.                var36 = this.yMax - this.rectangle[var56][0].y;
  1409.                var30 = this.rectangle[var56][1].x;
  1410.                var38 = this.yMax - this.rectangle[var56][1].y;
  1411.                var32 = this.rectangle[var56][2].x;
  1412.                var40 = this.yMax - this.rectangle[var56][2].y;
  1413.                var34 = this.rectangle[var56][3].x;
  1414.                var42 = this.yMax - this.rectangle[var56][3].y;
  1415.                this.displayQuadrilateral(var28, var36, (double)0.0F, var30, var38, (double)0.0F, var32, var40, (double)0.0F, var34, var42, (double)0.0F, 6);
  1416.  
  1417.                for(int var88 = 0; var88 < 4; ++var88) {
  1418.                   zvertex var140 = this.rectangle[var56][var88];
  1419.                   var140.x += (double)3.0F;
  1420.                }
  1421.             }
  1422.  
  1423.             this.field_0 += 8;
  1424.             return;
  1425.          case 4:
  1426.             if (this.field_1 > this.maxY) {
  1427.                this.state = 5;
  1428.             } else {
  1429.                switch (this.yMod4) {
  1430.                   case 0:
  1431.                      int var92 = 0;
  1432.  
  1433.                      for(int var50 = 1; var50 <= 2; ++var50) {
  1434.                         for(int var78 = 0; var78 < 3; ++var78) {
  1435.                            var25[var50][var78].x = this.baseTriangle[var50][var78].x;
  1436.                            var25[var50][var78].y = this.baseTriangle[var50][var78].y + this.yOffset;
  1437.                         }
  1438.                      }
  1439.  
  1440.                      for(int var79 = 0; var79 < 4; ++var79) {
  1441.                         this.rectangle[2][var79].x = this.baseRectangle[2][var79].x;
  1442.                         this.rectangle[2][var79].y = this.baseRectangle[2][var79].y + this.yOffset;
  1443.                      }
  1444.  
  1445.                      for(this.field_0 = 0; this.field_0 <= this.maxX; ++this.field_0) {
  1446.                         switch (var92) {
  1447.                            case 2:
  1448.                               var15[0].x = var25[1][0].x;
  1449.                               var15[0].y = var25[1][0].y;
  1450.                               var15[1].x = var25[1][1].x;
  1451.                               var15[1].y = var25[1][1].y;
  1452.                               var15[2].x = var25[1][2].x;
  1453.                               var15[2].y = var25[1][2].y;
  1454.                               this.outputTriangle(var15, true, 3);
  1455.                            case 3:
  1456.                            default:
  1457.                               break;
  1458.                            case 4:
  1459.                               var15[0].x = var25[2][0].x;
  1460.                               var15[0].y = var25[2][0].y;
  1461.                               var15[1].x = var25[2][1].x;
  1462.                               var15[1].y = var25[2][1].y;
  1463.                               var15[2].x = var25[2][2].x;
  1464.                               var15[2].y = var25[2][2].y;
  1465.                               this.outputTriangle(var15, true, 9);
  1466.                         }
  1467.  
  1468.                         ++var92;
  1469.                         if (var92 >= 8) {
  1470.                            var92 = 0;
  1471.  
  1472.                            for(int var51 = 1; var51 <= 2; ++var51) {
  1473.                               for(int var80 = 0; var80 < 3; ++var80) {
  1474.                                  var25[var51][var80].x += (double)3.0F;
  1475.                               }
  1476.                            }
  1477.  
  1478.                            for(int var81 = 0; var81 < 4; ++var81) {
  1479.                               zvertex var137 = this.rectangle[2][var81];
  1480.                               var137.x += (double)3.0F;
  1481.                            }
  1482.                         }
  1483.                      }
  1484.  
  1485.                      var92 = 0;
  1486.  
  1487.                      for(int var52 = 1; var52 <= 2; ++var52) {
  1488.                         for(int var82 = 0; var82 < 3; ++var82) {
  1489.                            var25[var52][var82].x = this.baseTriangle[var52][var82].x;
  1490.                            var25[var52][var82].y = this.baseTriangle[var52][var82].y + this.yOffset;
  1491.                         }
  1492.                      }
  1493.  
  1494.                      for(int var83 = 0; var83 < 4; ++var83) {
  1495.                         this.rectangle[2][var83].x = this.baseRectangle[2][var83].x;
  1496.                         this.rectangle[2][var83].y = this.baseRectangle[2][var83].y + this.yOffset;
  1497.                      }
  1498.  
  1499.                      for(this.field_0 = 0; this.field_0 <= this.maxX; ++this.field_0) {
  1500.                         switch (var92) {
  1501.                            case 2:
  1502.                               var15[0].x = var25[1][0].x;
  1503.                               var15[0].y = var25[1][0].y;
  1504.                               var15[1].x = var25[1][1].x;
  1505.                               var15[1].y = var25[1][1].y;
  1506.                               var15[2].x = var25[1][2].x;
  1507.                               var15[2].y = var25[1][2].y;
  1508.                               this.outputTriangle(var15, false, 8);
  1509.                               break;
  1510.                            case 3:
  1511.                               if (this.computerPage[this.field_1][this.field_0] == 0) {
  1512.                                  var14[0].x = this.rectangle[2][0].x;
  1513.                                  var14[0].y = this.rectangle[2][0].y;
  1514.                                  var14[1].x = this.rectangle[2][1].x;
  1515.                                  var14[1].y = this.rectangle[2][1].y;
  1516.                                  var14[2].x = this.rectangle[2][2].x;
  1517.                                  var14[2].y = this.rectangle[2][2].y;
  1518.                                  var14[3].x = this.rectangle[2][3].x;
  1519.                                  var14[3].y = this.rectangle[2][3].y;
  1520.                                  this.outputRectangle(var14, 7);
  1521.                               }
  1522.                               break;
  1523.                            case 4:
  1524.                               var15[0].x = var25[2][0].x;
  1525.                               var15[0].y = var25[2][0].y;
  1526.                               var15[1].x = var25[2][1].x;
  1527.                               var15[1].y = var25[2][1].y;
  1528.                               var15[2].x = var25[2][2].x;
  1529.                               var15[2].y = var25[2][2].y;
  1530.                               this.outputTriangle(var15, false, 5);
  1531.                         }
  1532.  
  1533.                         ++var92;
  1534.                         if (var92 >= 8) {
  1535.                            var92 = 0;
  1536.  
  1537.                            for(int var53 = 1; var53 <= 2; ++var53) {
  1538.                               for(int var84 = 0; var84 < 3; ++var84) {
  1539.                                  var25[var53][var84].x += (double)3.0F;
  1540.                               }
  1541.                            }
  1542.  
  1543.                            for(int var85 = 0; var85 < 4; ++var85) {
  1544.                               zvertex var138 = this.rectangle[2][var85];
  1545.                               var138.x += (double)3.0F;
  1546.                            }
  1547.                         }
  1548.                      }
  1549.                      break;
  1550.                   case 1:
  1551.                      int var91 = 0;
  1552.  
  1553.                      for(int var48 = 1; var48 < 4; var48 += 2) {
  1554.                         for(int var76 = 0; var76 < 4; ++var76) {
  1555.                            this.rectangle[var48][var76].x = this.baseRectangle[var48][var76].x;
  1556.                            this.rectangle[var48][var76].y = this.baseRectangle[var48][var76].y + this.yOffset;
  1557.                         }
  1558.                      }
  1559.  
  1560.                      for(this.field_0 = 0; this.field_0 <= this.maxX; ++this.field_0) {
  1561.                         switch (var91) {
  1562.                            case 1:
  1563.                               if (this.computerPage[this.field_1][this.field_0] == 0) {
  1564.                                  var14[0].x = this.rectangle[1][0].x;
  1565.                                  var14[0].y = this.rectangle[1][0].y;
  1566.                                  var14[1].x = this.rectangle[1][1].x;
  1567.                                  var14[1].y = this.rectangle[1][1].y;
  1568.                                  var14[2].x = this.rectangle[1][2].x;
  1569.                                  var14[2].y = this.rectangle[1][2].y;
  1570.                                  var14[3].x = this.rectangle[1][3].x;
  1571.                                  var14[3].y = this.rectangle[1][3].y;
  1572.                                  this.outputRectangle(var14, 4);
  1573.                               }
  1574.                               break;
  1575.                            case 5:
  1576.                               if (this.computerPage[this.field_1][this.field_0] == 0) {
  1577.                                  var14[0].x = this.rectangle[3][0].x;
  1578.                                  var14[0].y = this.rectangle[3][0].y;
  1579.                                  var14[1].x = this.rectangle[3][1].x;
  1580.                                  var14[1].y = this.rectangle[3][1].y;
  1581.                                  var14[2].x = this.rectangle[3][2].x;
  1582.                                  var14[2].y = this.rectangle[3][2].y;
  1583.                                  var14[3].x = this.rectangle[3][3].x;
  1584.                                  var14[3].y = this.rectangle[3][3].y;
  1585.                                  this.outputRectangle(var14, 10);
  1586.                               }
  1587.                         }
  1588.  
  1589.                         ++var91;
  1590.                         if (var91 >= 8) {
  1591.                            var91 = 0;
  1592.  
  1593.                            for(int var49 = 1; var49 < 4; var49 += 2) {
  1594.                               for(int var77 = 0; var77 < 4; ++var77) {
  1595.                                  zvertex var136 = this.rectangle[var49][var77];
  1596.                                  var136.x += (double)3.0F;
  1597.                               }
  1598.                            }
  1599.                         }
  1600.                      }
  1601.                      break;
  1602.                   case 2:
  1603.                      int var27 = 0;
  1604.  
  1605.                      for(int var44 = 0; var44 < 4; var44 += 3) {
  1606.                         for(int var68 = 0; var68 < 3; ++var68) {
  1607.                            var25[var44][var68].x = this.baseTriangle[var44][var68].x;
  1608.                            var25[var44][var68].y = this.baseTriangle[var44][var68].y + this.yOffset;
  1609.                         }
  1610.                      }
  1611.  
  1612.                      for(int var69 = 0; var69 < 4; ++var69) {
  1613.                         this.rectangle[4][var69].x = this.baseRectangle[4][var69].x;
  1614.                         this.rectangle[4][var69].y = this.baseRectangle[4][var69].y + this.yOffset;
  1615.                      }
  1616.  
  1617.                      for(this.field_0 = 0; this.field_0 <= this.maxX; ++this.field_0) {
  1618.                         switch (var27) {
  1619.                            case 0:
  1620.                               var15[0].x = var25[0][0].x;
  1621.                               var15[0].y = var25[0][0].y;
  1622.                               var15[1].x = var25[0][1].x;
  1623.                               var15[1].y = var25[0][1].y;
  1624.                               var15[2].x = var25[0][2].x;
  1625.                               var15[2].y = var25[0][2].y;
  1626.                               this.outputTriangle(var15, true, 3);
  1627.                               break;
  1628.                            case 6:
  1629.                               var15[0].x = var25[3][0].x;
  1630.                               var15[0].y = var25[3][0].y;
  1631.                               var15[1].x = var25[3][1].x;
  1632.                               var15[1].y = var25[3][1].y;
  1633.                               var15[2].x = var25[3][2].x;
  1634.                               var15[2].y = var25[3][2].y;
  1635.                               this.outputTriangle(var15, true, 9);
  1636.                         }
  1637.  
  1638.                         ++var27;
  1639.                         if (var27 >= 8) {
  1640.                            var27 = 0;
  1641.  
  1642.                            for(int var45 = 0; var45 < 4; var45 += 3) {
  1643.                               for(int var70 = 0; var70 < 3; ++var70) {
  1644.                                  var25[var45][var70].x += (double)3.0F;
  1645.                               }
  1646.                            }
  1647.  
  1648.                            for(int var71 = 0; var71 < 4; ++var71) {
  1649.                               zvertex var10000 = this.rectangle[4][var71];
  1650.                               var10000.x += (double)3.0F;
  1651.                            }
  1652.                         }
  1653.                      }
  1654.  
  1655.                      var27 = 0;
  1656.  
  1657.                      for(int var46 = 0; var46 < 4; var46 += 3) {
  1658.                         for(int var72 = 0; var72 < 3; ++var72) {
  1659.                            var25[var46][var72].x = this.baseTriangle[var46][var72].x;
  1660.                            var25[var46][var72].y = this.baseTriangle[var46][var72].y + this.yOffset;
  1661.                         }
  1662.                      }
  1663.  
  1664.                      for(int var73 = 0; var73 < 4; ++var73) {
  1665.                         this.rectangle[4][var73].x = this.baseRectangle[4][var73].x;
  1666.                         this.rectangle[4][var73].y = this.baseRectangle[4][var73].y + this.yOffset;
  1667.                      }
  1668.  
  1669.                      for(this.field_0 = 0; this.field_0 <= this.maxX; ++this.field_0) {
  1670.                         switch (var27) {
  1671.                            case 0:
  1672.                               var15[0].x = var25[0][0].x;
  1673.                               var15[0].y = var25[0][0].y;
  1674.                               var15[1].x = var25[0][1].x;
  1675.                               var15[1].y = var25[0][1].y;
  1676.                               var15[2].x = var25[0][2].x;
  1677.                               var15[2].y = var25[0][2].y;
  1678.                               this.outputTriangle(var15, false, 5);
  1679.                               break;
  1680.                            case 6:
  1681.                               var15[0].x = var25[3][0].x;
  1682.                               var15[0].y = var25[3][0].y;
  1683.                               var15[1].x = var25[3][1].x;
  1684.                               var15[1].y = var25[3][1].y;
  1685.                               var15[2].x = var25[3][2].x;
  1686.                               var15[2].y = var25[3][2].y;
  1687.                               this.outputTriangle(var15, false, 8);
  1688.                               break;
  1689.                            case 7:
  1690.                               if (this.computerPage[this.field_1][this.field_0] == 0) {
  1691.                                  var14[0].x = this.rectangle[4][0].x;
  1692.                                  var14[0].y = this.rectangle[4][0].y;
  1693.                                  var14[1].x = this.rectangle[4][1].x;
  1694.                                  var14[1].y = this.rectangle[4][1].y;
  1695.                                  var14[2].x = this.rectangle[4][2].x;
  1696.                                  var14[2].y = this.rectangle[4][2].y;
  1697.                                  var14[3].x = this.rectangle[4][3].x;
  1698.                                  var14[3].y = this.rectangle[4][3].y;
  1699.                                  this.outputRectangle(var14, 7);
  1700.                               }
  1701.                         }
  1702.  
  1703.                         ++var27;
  1704.                         if (var27 >= 8) {
  1705.                            var27 = 0;
  1706.  
  1707.                            for(int var47 = 0; var47 < 4; var47 += 3) {
  1708.                               for(int var74 = 0; var74 < 3; ++var74) {
  1709.                                  var25[var47][var74].x += (double)3.0F;
  1710.                               }
  1711.                            }
  1712.  
  1713.                            for(int var75 = 0; var75 < 4; ++var75) {
  1714.                               zvertex var135 = this.rectangle[4][var75];
  1715.                               var135.x += (double)3.0F;
  1716.                            }
  1717.                         }
  1718.                      }
  1719.                      break;
  1720.                   default:
  1721.                      int var94 = 0;
  1722.  
  1723.                      for(int var54 = 0; var54 < 6; var54 += 5) {
  1724.                         for(int var86 = 0; var86 < 4; ++var86) {
  1725.                            this.rectangle[var54][var86].x = this.baseRectangle[var54][var86].x;
  1726.                            this.rectangle[var54][var86].y = this.baseRectangle[var54][var86].y + this.yOffset;
  1727.                         }
  1728.                      }
  1729.  
  1730.                      for(this.field_0 = 0; this.field_0 <= this.maxX; ++this.field_0) {
  1731.                         switch (var94) {
  1732.                            case 1:
  1733.                               if (this.computerPage[this.field_1][this.field_0] == 0) {
  1734.                                  var14[0].x = this.rectangle[0][0].x;
  1735.                                  var14[0].y = this.rectangle[0][0].y;
  1736.                                  var14[1].x = this.rectangle[0][1].x;
  1737.                                  var14[1].y = this.rectangle[0][1].y;
  1738.                                  var14[2].x = this.rectangle[0][2].x;
  1739.                                  var14[2].y = this.rectangle[0][2].y;
  1740.                                  var14[3].x = this.rectangle[0][3].x;
  1741.                                  var14[3].y = this.rectangle[0][3].y;
  1742.                                  this.outputRectangle(var14, 10);
  1743.                               }
  1744.                               break;
  1745.                            case 5:
  1746.                               if (this.computerPage[this.field_1][this.field_0] == 0) {
  1747.                                  var14[0].x = this.rectangle[5][0].x;
  1748.                                  var14[0].y = this.rectangle[5][0].y;
  1749.                                  var14[1].x = this.rectangle[5][1].x;
  1750.                                  var14[1].y = this.rectangle[5][1].y;
  1751.                                  var14[2].x = this.rectangle[5][2].x;
  1752.                                  var14[2].y = this.rectangle[5][2].y;
  1753.                                  var14[3].x = this.rectangle[5][3].x;
  1754.                                  var14[3].y = this.rectangle[5][3].y;
  1755.                                  this.outputRectangle(var14, 4);
  1756.                               }
  1757.                         }
  1758.  
  1759.                         ++var94;
  1760.                         if (var94 >= 8) {
  1761.                            var94 = 0;
  1762.  
  1763.                            for(int var55 = 0; var55 < 6; var55 += 5) {
  1764.                               for(int var87 = 0; var87 < 4; ++var87) {
  1765.                                  zvertex var139 = this.rectangle[var55][var87];
  1766.                                  var139.x += (double)3.0F;
  1767.                               }
  1768.                            }
  1769.                         }
  1770.                      }
  1771.                }
  1772.  
  1773.                if (++this.yMod4 >= 4) {
  1774.                   this.yMod4 = 0;
  1775.                   this.yOffset += this.sqrt3;
  1776.                }
  1777.  
  1778.                ++this.field_1;
  1779.             }
  1780.  
  1781.             if (this.state == 5) {
  1782.                this.alreadyPainting = false;
  1783.                this.hexDisplayUserMoves();
  1784.                if (this.solutionDisplayed) {
  1785.                   this.hexDisplaySolution();
  1786.                   return;
  1787.                }
  1788.             }
  1789.       }
  1790.  
  1791.    }
  1792.  
  1793.    public void sqrKey(int var1) {
  1794.       int var8 = 0;
  1795.       double var6 = (double)0.0F;
  1796.       double var9 = (double)0.0F;
  1797.       boolean var2 = true;
  1798.       int var5 = this.userX + this.sqrDeltaX[var1][0];
  1799.       if (var5 <= 0) {
  1800.          var2 = false;
  1801.       } else if (var5 >= this.maxX) {
  1802.          var2 = false;
  1803.       } else {
  1804.          var8 = this.userY + this.sqrDeltaY[var1][0];
  1805.       }
  1806.  
  1807.       if (var8 <= 0) {
  1808.          var2 = false;
  1809.       } else if (var8 > this.maxY) {
  1810.          var2 = false;
  1811.       } else if (this.userPage[var8][var5] == 0) {
  1812.          var2 = false;
  1813.       }
  1814.  
  1815.       if (var2) {
  1816.          var5 += this.sqrDeltaX[var1][0];
  1817.          var8 += this.sqrDeltaY[var1][0];
  1818.          if (var8 < this.maxY) {
  1819.             if (this.userPage[var8][var5] == 1) {
  1820.                this.graph.setColor(this.redGreenBlue[13]);
  1821.                this.userPage[this.userY][this.userX] = 3;
  1822.             } else {
  1823.                this.graph.setColor(this.redGreenBlue[14]);
  1824.                this.userPage[var8][var5] = 1;
  1825.             }
  1826.  
  1827.             double var3 = (double)this.sqrDeltaX[var1][0];
  1828.             var6 = this.userXRelative + var3;
  1829.             var3 = (double)this.sqrDeltaY[var1][0];
  1830.             var9 = this.userYRelative + var3;
  1831.             this.drawLine(this.userXRelative, this.userYRelative, var6, var9);
  1832.          } else {
  1833.             this.graph.setColor(this.redGreenBlue[14]);
  1834.             this.drawLine(this.userXRelative, this.userYRelative, this.userXRelative, this.yMax);
  1835.             this.userHasSolved = true;
  1836.          }
  1837.  
  1838.          this.userX = var5;
  1839.          this.userY = var8;
  1840.          this.userXRelative = var6;
  1841.          this.userYRelative = var9;
  1842.       }
  1843.  
  1844.    }
  1845.  
  1846.    public void sqrDisplayUserMoves() {
  1847.       double var7 = (double)0.0F;
  1848.       int var11 = 1;
  1849.  
  1850.       double var14;
  1851.       for(var14 = (double)0.625F; var11 < this.maxY; var11 += 2) {
  1852.          int var4 = 1;
  1853.  
  1854.          for(var7 = (double)0.625F; var4 < this.maxX; var4 += 2) {
  1855.             if (this.userPage[var11][var4] == 1 || this.userPage[var11][var4] == 3) {
  1856.                for(int var1 = 0; var1 < 4; ++var1) {
  1857.                   int var5 = var4 + this.sqrDeltaX[var1][0];
  1858.                   int var12 = var11 + this.sqrDeltaY[var1][0];
  1859.                   if (this.userPage[var12][var5] != 0) {
  1860.                      if (var12 == 0) {
  1861.                         this.graph.setColor(this.redGreenBlue[14]);
  1862.                         this.drawLine(var7, (double)0.125F, var7, var14);
  1863.                      } else if (var12 == this.maxY) {
  1864.                         if (this.userHasSolved) {
  1865.                            this.graph.setColor(this.redGreenBlue[14]);
  1866.                            this.drawLine(var7, var14, var7, this.yMax);
  1867.                         }
  1868.                      } else {
  1869.                         int var6 = var5 + this.sqrDeltaX[var1][0];
  1870.                         if (var6 > 0 && var6 < this.maxX) {
  1871.                            int var13 = var12 + this.sqrDeltaY[var1][0];
  1872.                            if (var13 > 0 && var13 < this.maxY && (this.userPage[var13][var6] == 1 || this.userPage[var13][var6] == 3)) {
  1873.                               if (this.userPage[var11][var4] == this.userPage[var13][var6]) {
  1874.                                  if (this.userPage[var11][var4] == 1) {
  1875.                                     this.graph.setColor(this.redGreenBlue[14]);
  1876.                                  } else {
  1877.                                     this.graph.setColor(this.redGreenBlue[13]);
  1878.                                  }
  1879.                               } else {
  1880.                                  this.graph.setColor(this.redGreenBlue[13]);
  1881.                               }
  1882.  
  1883.                               double var2 = (double)this.sqrDeltaX[var1][0];
  1884.                               double var9 = var7 + var2 / (double)2.0F;
  1885.                               var2 = (double)this.sqrDeltaY[var1][0];
  1886.                               double var16 = var14 + var2 / (double)2.0F;
  1887.                               this.drawLine(var7, var14, var9, var16);
  1888.                            }
  1889.                         }
  1890.                      }
  1891.                   }
  1892.                }
  1893.             }
  1894.  
  1895.             ++var7;
  1896.          }
  1897.  
  1898.          ++var14;
  1899.       }
  1900.  
  1901.       if (this.userHasSolved) {
  1902.          this.graph.setColor(this.redGreenBlue[14]);
  1903.          this.drawLine(var7, var14, var7, this.yMax);
  1904.       }
  1905.  
  1906.    }
  1907.  
  1908.    private void sqrSolveMaze() {
  1909.       this.numRoomsInSolution = 1;
  1910.       this.adjacency = 0;
  1911.       int var4 = 1;
  1912.       int var6 = 1;
  1913.       int var3 = -1;
  1914.       this.computerPage[var6][var4] = 1;
  1915.       int var7 = 0;
  1916.       int var5 = 0;
  1917.  
  1918.       label98:
  1919.       while(true) {
  1920.          int var8 = 0;
  1921.          boolean var2 = false;
  1922.  
  1923.          while(true) {
  1924.             while(var8 >= 4 || var2) {
  1925.                if (!var2) {
  1926.                   var8 = this.stack[var3].index1;
  1927.                   this.computerPage[var6][var4] = 2;
  1928.                   var4 -= this.sqrDeltaX[var8][0];
  1929.                   var6 -= this.sqrDeltaY[var8][0];
  1930.                   this.computerPage[var6][var4] = 2;
  1931.                   var4 -= this.sqrDeltaX[var8][0];
  1932.                   var6 -= this.sqrDeltaY[var8][0];
  1933.                   --var3;
  1934.                   ++var8;
  1935.                }
  1936.  
  1937.                if (var2) {
  1938.                   this.computerPage[var7][var5] = 1;
  1939.                   var5 += this.sqrDeltaX[var8][0];
  1940.                   var7 += this.sqrDeltaY[var8][0];
  1941.                   if (var7 <= this.maxY) {
  1942.                      ++var3;
  1943.                      this.stack[var3].index1 = (short)var8;
  1944.                      this.computerPage[var7][var5] = 1;
  1945.                      var4 = var5;
  1946.                      var6 = var7;
  1947.                   }
  1948.  
  1949.                   if (var7 >= this.maxY) {
  1950.                      break label98;
  1951.                   }
  1952.                   continue label98;
  1953.                }
  1954.             }
  1955.  
  1956.             var5 = var4 + this.sqrDeltaX[var8][0];
  1957.             var7 = var6 + this.sqrDeltaY[var8][0];
  1958.             if (this.computerPage[var7][var5] == 2) {
  1959.                var2 = true;
  1960.             } else {
  1961.                ++var8;
  1962.             }
  1963.          }
  1964.       }
  1965.  
  1966.       var4 = this.maxX - 1;
  1967.       var6 = this.maxY - 1;
  1968.  
  1969.       for(this.adjacency = 0; var3 >= 0; ++this.numRoomsInSolution) {
  1970.          for(int var9 = 0; var9 < 4; ++var9) {
  1971.             var5 = var4 + this.sqrDeltaX[var9][0];
  1972.             var7 = var6 + this.sqrDeltaY[var9][0];
  1973.             if (this.computerPage[var7][var5] != 1 && this.computerPage[var7][var5] == 0) {
  1974.                var5 += this.sqrDeltaX[var9][0];
  1975.                var7 += this.sqrDeltaY[var9][0];
  1976.                if (var5 < 0) {
  1977.                   ++this.adjacency;
  1978.                } else if (var5 > this.maxX) {
  1979.                   ++this.adjacency;
  1980.                } else if (var7 < 0) {
  1981.                   ++this.adjacency;
  1982.                } else if (var7 > this.maxY) {
  1983.                   ++this.adjacency;
  1984.                } else if (this.computerPage[var7][var5] == 1) {
  1985.                   ++this.adjacency;
  1986.                }
  1987.             }
  1988.          }
  1989.  
  1990.          var4 -= 2 * this.sqrDeltaX[this.stack[var3].index1][0];
  1991.          var6 -= 2 * this.sqrDeltaY[this.stack[var3--].index1][0];
  1992.       }
  1993.  
  1994.       for(int var10 = 0; var10 < 4; ++var10) {
  1995.          var5 = var4 + this.sqrDeltaX[var10][0];
  1996.          var7 = var4 + this.sqrDeltaY[var10][0];
  1997.          if (this.computerPage[var7][var5] != 2 && this.computerPage[var7][var5] == 0) {
  1998.             var5 += this.sqrDeltaX[var10][0];
  1999.             var7 += this.sqrDeltaY[var10][0];
  2000.             if (var5 < 0) {
  2001.                ++this.adjacency;
  2002.             } else if (var5 > this.maxX) {
  2003.                ++this.adjacency;
  2004.             } else if (var7 < 0) {
  2005.                ++this.adjacency;
  2006.             } else if (var7 > this.maxY) {
  2007.                ++this.adjacency;
  2008.             } else if (this.computerPage[var7][var5] == 1) {
  2009.                ++this.adjacency;
  2010.             }
  2011.          }
  2012.       }
  2013.  
  2014.    }
  2015.  
  2016.    private void sqrGenerateMaze(int[] var1) {
  2017.       int var17 = 0;
  2018.       int var15 = 0;
  2019.       int[] var7 = new int[]{var1[0] + 1, var1[1] + 1, var1[2] + 1, var1[3] + 1, var1[4] + 1, var1[5] + 1, var1[6] + 1, var1[7] + 1};
  2020.  
  2021.       for(int var16 = 0; var16 <= this.maxY; ++var16) {
  2022.          for(int var14 = 0; var14 <= this.maxX; ++var14) {
  2023.             this.computerPage[var16][var14] = 0;
  2024.          }
  2025.       }
  2026.  
  2027.       int var12 = 0;
  2028.  
  2029.       for(int var5 = 1; var5 <= 3; ++var5) {
  2030.          int var4 = var7[0];
  2031.          int var8 = 0;
  2032.  
  2033.          for(int var9 = 1; var9 < 8; var8 = var9++) {
  2034.             int var13 = var7[var9];
  2035.             var7[var8] = var13;
  2036.             var4 += var13;
  2037.             if (var4 >= 29) {
  2038.                var4 -= 29;
  2039.             }
  2040.          }
  2041.  
  2042.          var7[7] = var4;
  2043.          var12 = 29 * var12 + var4;
  2044.       }
  2045.  
  2046.       int var28 = 2 * (var12 % this.numColumns) + 1;
  2047.       var12 = 0;
  2048.  
  2049.       for(int var20 = 1; var20 <= 3; ++var20) {
  2050.          int var19 = var7[0];
  2051.          int var21 = 0;
  2052.  
  2053.          for(int var23 = 1; var23 < 8; var21 = var23++) {
  2054.             int var26 = var7[var23];
  2055.             var7[var21] = var26;
  2056.             var19 += var26;
  2057.             if (var19 >= 29) {
  2058.                var19 -= 29;
  2059.             }
  2060.          }
  2061.  
  2062.          var7[7] = var19;
  2063.          var12 = 29 * var12 + var19;
  2064.       }
  2065.  
  2066.       int var29 = 2 * (var12 % this.numRows) + 1;
  2067.       this.computerPage[var29][var28] = 2;
  2068.       int var11 = -1;
  2069.  
  2070.       do {
  2071.          int var18 = 0;
  2072.  
  2073.          int var3;
  2074.          do {
  2075.             var3 = var7[0];
  2076.             int var22 = 0;
  2077.  
  2078.             for(int var24 = 1; var24 < 8; var22 = var24++) {
  2079.                int var27 = var7[var24];
  2080.                var7[var22] = var27;
  2081.                var3 += var27;
  2082.                if (var3 >= 29) {
  2083.                   var3 -= 29;
  2084.                }
  2085.             }
  2086.  
  2087.             var7[7] = var3;
  2088.          } while(var3 >= 24);
  2089.  
  2090.          boolean var6 = false;
  2091.  
  2092.          for(boolean var10 = false; !var10; var10 = var6 || var11 == -1 && var18 >= 4) {
  2093.             while(var18 < 4 && !var6) {
  2094.                var15 = var28 + 2 * this.sqrDeltaX[var18][var3];
  2095.                if (var15 <= 0) {
  2096.                   ++var18;
  2097.                } else if (var15 > this.maxX) {
  2098.                   ++var18;
  2099.                } else {
  2100.                   var17 = var29 + 2 * this.sqrDeltaY[var18][var3];
  2101.                   if (var17 <= 0) {
  2102.                      ++var18;
  2103.                   } else if (var17 > this.maxY) {
  2104.                      ++var18;
  2105.                   } else if (this.computerPage[var17][var15] == 0) {
  2106.                      var6 = true;
  2107.                   } else {
  2108.                      ++var18;
  2109.                   }
  2110.                }
  2111.             }
  2112.  
  2113.             if (!var6 && var11 >= 0) {
  2114.                var18 = this.stack[var11].index1;
  2115.                var3 = this.stack[var11--].index2;
  2116.                var28 -= 2 * this.sqrDeltaX[var18][var3];
  2117.                var29 -= 2 * this.sqrDeltaY[var18++][var3];
  2118.             }
  2119.          }
  2120.  
  2121.          if (var6) {
  2122.             ++var11;
  2123.             this.stack[var11].index1 = (short)var18;
  2124.             this.stack[var11].index2 = (short)var3;
  2125.             this.computerPage[var17][var15] = 2;
  2126.             this.computerPage[(var29 + var17) / 2][(var28 + var15) / 2] = 2;
  2127.             var28 = var15;
  2128.             var29 = var17;
  2129.          }
  2130.       } while(var11 != -1);
  2131.  
  2132.       this.computerPage[0][1] = 1;
  2133.       this.computerPage[this.maxY][this.maxX - 1] = 2;
  2134.    }
  2135.  
  2136.    private void sqrSelectMaze() {
  2137.       byte var1 = 0;
  2138.       byte var14 = 0;
  2139.       int[] var16 = new int[8];
  2140.       int[] var17 = new int[8];
  2141.       int var2 = this.seed[0];
  2142.       int var3 = this.seed[1];
  2143.       int var4 = this.seed[2];
  2144.       int var5 = this.seed[3];
  2145.       int var6 = this.seed[4];
  2146.       int var7 = this.seed[5];
  2147.       int var8 = this.seed[6];
  2148.       int var9 = this.seed[7];
  2149.       this.hash();
  2150.       int var13 = 2 * this.numRoomsInMaze + 1;
  2151.       byte var15 = 0;
  2152.       var17[0] = var2;
  2153.       var17[1] = var3;
  2154.       var17[2] = var4;
  2155.       var17[3] = var5;
  2156.       var17[4] = var6;
  2157.       var17[5] = var7;
  2158.       var17[6] = var8;
  2159.       var17[7] = var9;
  2160.       Date var10 = new Date();
  2161.       double var18 = (double)var10.getTime() / (double)1000.0F;
  2162.  
  2163.       double var11;
  2164.       do {
  2165.          var16[0] = var2;
  2166.          var16[1] = var3;
  2167.          var16[2] = var4;
  2168.          var16[3] = var5;
  2169.          var16[4] = var6;
  2170.          var16[5] = var7;
  2171.          var16[6] = var8;
  2172.          var16[7] = var9;
  2173.          this.sqrGenerateMaze(var16);
  2174.          this.sqrSolveMaze();
  2175.          if (3 * var14 >= this.numRoomsInMaze) {
  2176.             if (var1 < var13) {
  2177.                var13 = var1;
  2178.                var15 = var14;
  2179.                var17[0] = var16[0];
  2180.                var17[1] = var16[1];
  2181.                var17[2] = var16[2];
  2182.                var17[3] = var16[3];
  2183.                var17[4] = var16[4];
  2184.                var17[5] = var16[5];
  2185.                var17[6] = var16[6];
  2186.                var17[7] = var16[7];
  2187.             } else if (var1 == var13 && var14 > var15) {
  2188.                var15 = var14;
  2189.                var17[0] = var16[0];
  2190.                var17[1] = var16[1];
  2191.                var17[2] = var16[2];
  2192.                var17[3] = var16[3];
  2193.                var17[4] = var16[4];
  2194.                var17[5] = var16[5];
  2195.                var17[6] = var16[6];
  2196.                var17[7] = var16[7];
  2197.             }
  2198.          }
  2199.  
  2200.          this.increment();
  2201.          var10 = new Date();
  2202.          var11 = (double)var10.getTime() / (double)1000.0F - var18;
  2203.       } while(var11 >= (double)0.0F && var11 < (double)0.25F);
  2204.  
  2205.       this.sqrGenerateMaze(var17);
  2206.       this.sqrSolveMaze();
  2207.    }
  2208.  
  2209.    public void sqrDisplaySolution() {
  2210.       double var8 = (double)0.625F;
  2211.       double var15 = (double)0.625F;
  2212.       double var10 = (double)0.0F;
  2213.       double var17 = (double)0.0F;
  2214.       this.graph.setColor(this.redGreenBlue[15]);
  2215.       this.drawLine(var8, (double)0.125F, var8, var15);
  2216.       int var7 = 1;
  2217.       int var14 = -1;
  2218.       int var5 = 1;
  2219.       int var12 = 1;
  2220.       int var6 = 0;
  2221.       int var13 = 0;
  2222.  
  2223.       do {
  2224.          boolean var2 = false;
  2225.          int var1 = 0;
  2226.  
  2227.          while(!var2) {
  2228.             var6 = var5 + this.sqrDeltaX[var1][0];
  2229.             var13 = var12 + this.sqrDeltaY[var1][0];
  2230.             if (this.computerPage[var13][var6] == 1) {
  2231.                var6 += this.sqrDeltaX[var1][0];
  2232.                var13 += this.sqrDeltaY[var1][0];
  2233.                if (var6 == var7 && var13 == var14) {
  2234.                   ++var1;
  2235.                } else {
  2236.                   var2 = true;
  2237.                }
  2238.             } else {
  2239.                ++var1;
  2240.             }
  2241.          }
  2242.  
  2243.          if (var13 < this.maxY) {
  2244.             double var3 = (double)this.sqrDeltaX[var1][0];
  2245.             var10 = var8 + var3;
  2246.             var3 = (double)this.sqrDeltaY[var1][0];
  2247.             var17 = var15 + var3;
  2248.             this.drawLine(var8, var15, var10, var17);
  2249.          } else {
  2250.             this.drawLine(var8, var15, var8, this.yMax);
  2251.          }
  2252.  
  2253.          var7 = var5;
  2254.          var14 = var12;
  2255.          var5 = var6;
  2256.          var12 = var13;
  2257.          var8 = var10;
  2258.          var15 = var17;
  2259.       } while(var13 < this.maxY);
  2260.  
  2261.    }
  2262.  
  2263.    private void sqrOutputMaze() {
  2264.       zvertex[] var13 = new zvertex[4];
  2265.  
  2266.       for(int var21 = 0; var21 < 4; ++var21) {
  2267.          var13[var21] = new zvertex();
  2268.       }
  2269.  
  2270.       switch (this.state) {
  2271.          case 0:
  2272.             if (this.resize) {
  2273.                this.seed = new int[8];
  2274.                Date var20 = new Date();
  2275.                long var4 = var20.getTime();
  2276.  
  2277.                for(int var3 = 0; var3 < 8; ++var3) {
  2278.                   long var6 = var4 / 10L;
  2279.                   this.seed[var3] = (int)(var4 - 10L * var6);
  2280.                   var4 = var6;
  2281.                }
  2282.  
  2283.                double var14 = (double)this.screen.width * 0.28;
  2284.                double var16 = (double)0.25F;
  2285.                var16 *= 25.4;
  2286.                double var18 = (double)0.25F;
  2287.                this.numColumns = (int)(var14 / var16 - var18);
  2288.                if (this.numColumns < 2) {
  2289.                   this.numColumns = 2;
  2290.                }
  2291.  
  2292.                var14 = (double)this.screen.height * 0.28;
  2293.                var16 = (double)this.screen.width * 0.28;
  2294.                var18 = (double)this.numColumns;
  2295.                this.numRows = (int)(var14 * var18 / var16);
  2296.                if (this.numRows < 2) {
  2297.                   this.numRows = 2;
  2298.                }
  2299.  
  2300.                this.maxX = 2 * this.numColumns;
  2301.                this.maxY = 2 * this.numRows;
  2302.                this.numRoomsInMaze = this.numRows * this.numColumns;
  2303.                this.computerPage = new char[this.maxY + 1][this.maxX + 1];
  2304.                this.userPage = new char[this.maxY + 1][this.maxX + 1];
  2305.                this.clearUserAttempts = true;
  2306.                this.stack = new zstack[this.numRoomsInMaze];
  2307.  
  2308.                for(int var12 = 0; var12 < this.numRoomsInMaze; ++var12) {
  2309.                   this.stack[var12] = new zstack();
  2310.                }
  2311.  
  2312.                this.sqrSelectMaze();
  2313.                this.resize = false;
  2314.             }
  2315.  
  2316.             if (this.clearUserAttempts) {
  2317.                for(this.userX = 0; this.userX <= this.maxX; ++this.userX) {
  2318.                   for(this.userY = 0; this.userY <= this.maxY; ++this.userY) {
  2319.                      if (this.computerPage[this.userY][this.userX] == 0) {
  2320.                         this.userPage[this.userY][this.userX] = 0;
  2321.                      } else {
  2322.                         this.userPage[this.userY][this.userX] = 2;
  2323.                      }
  2324.                   }
  2325.                }
  2326.  
  2327.                this.userX = 1;
  2328.                this.userXRelative = (double)0.625F;
  2329.                this.userY = 1;
  2330.                this.userYRelative = (double)0.625F;
  2331.                this.userPage[this.userY][this.userX] = 1;
  2332.                this.clearUserAttempts = false;
  2333.             }
  2334.  
  2335.             if (this.paint) {
  2336.                int[] var1 = new int[4];
  2337.                int[] var2 = new int[4];
  2338.                var1[0] = 0;
  2339.                var2[0] = 0;
  2340.                var1[1] = 0;
  2341.                var2[1] = this.screen.height;
  2342.                var1[2] = this.screen.width;
  2343.                var2[2] = this.screen.height;
  2344.                var1[3] = this.screen.width;
  2345.                var2[3] = 0;
  2346.                this.graph.setColor(new Color(255, 255, 255));
  2347.                this.graph.fillPolygon(var1, var2, 4);
  2348.                double var10 = Math.atan((double)1.0F) / (double)45.0F;
  2349.                double var8 = this.tilt * var10;
  2350.                this.sinTilt = Math.sin(var8);
  2351.                this.cosTilt = Math.cos(var8);
  2352.                double var39 = (double)this.numColumns;
  2353.                this.xMax = var39 + (double)0.25F;
  2354.                var39 = (double)this.screen.width;
  2355.                this.pixelsPerX = (var39 - (double)1.0F) / (this.xMax * (this.xMax / (this.xMax - (double)2.0F)));
  2356.                this.xOffset = this.xMax / (double)2.0F * ((double)2.0F / (this.xMax - (double)2.0F));
  2357.                var39 = (double)this.numRows;
  2358.                this.yMax = var39 + (double)0.25F;
  2359.                var39 = (double)this.screen.height;
  2360.                this.pixelsPerZ = (var39 - (double)1.0F) / Math.sqrt(this.yMax * this.yMax + (double)4.0F);
  2361.                if (this.yMax > this.xMax) {
  2362.                   this.relDistOfUserFromScreen = this.yMax;
  2363.                } else {
  2364.                   this.relDistOfUserFromScreen = this.xMax;
  2365.                }
  2366.  
  2367.                this.paint = false;
  2368.             }
  2369.  
  2370.             if (this.state == 0) {
  2371.                this.state = 1;
  2372.                return;
  2373.             }
  2374.             break;
  2375.          case 1:
  2376.             this.baseRectangle[0][0].x = (double)0.0F;
  2377.             this.baseRectangle[0][0].y = (double)0.0F;
  2378.             this.baseRectangle[0][1].x = (double)0.25F;
  2379.             this.baseRectangle[0][1].y = (double)0.0F;
  2380.             this.baseRectangle[0][2].x = (double)0.25F;
  2381.             this.baseRectangle[0][2].y = (double)0.25F;
  2382.             this.baseRectangle[0][3].x = (double)0.0F;
  2383.             this.baseRectangle[0][3].y = (double)0.25F;
  2384.             this.baseRectangle[1][0].x = (double)0.25F;
  2385.             this.baseRectangle[1][0].y = (double)0.0F;
  2386.             this.baseRectangle[1][1].x = (double)1.0F;
  2387.             this.baseRectangle[1][1].y = (double)0.0F;
  2388.             this.baseRectangle[1][2].x = (double)1.0F;
  2389.             this.baseRectangle[1][2].y = (double)0.25F;
  2390.             this.baseRectangle[1][3].x = (double)0.25F;
  2391.             this.baseRectangle[1][3].y = (double)0.25F;
  2392.             this.baseRectangle[2][0].x = (double)0.25F;
  2393.             this.baseRectangle[2][0].y = (double)0.25F;
  2394.             this.baseRectangle[2][1].x = (double)1.0F;
  2395.             this.baseRectangle[2][1].y = (double)0.25F;
  2396.             this.baseRectangle[2][2].x = (double)1.0F;
  2397.             this.baseRectangle[2][2].y = (double)1.0F;
  2398.             this.baseRectangle[2][3].x = (double)0.25F;
  2399.             this.baseRectangle[2][3].y = (double)1.0F;
  2400.             this.baseRectangle[3][0].x = (double)0.0F;
  2401.             this.baseRectangle[3][0].y = (double)0.25F;
  2402.             this.baseRectangle[3][1].x = (double)0.25F;
  2403.             this.baseRectangle[3][1].y = (double)0.25F;
  2404.             this.baseRectangle[3][2].x = (double)0.25F;
  2405.             this.baseRectangle[3][2].y = (double)1.0F;
  2406.             this.baseRectangle[3][3].x = (double)0.0F;
  2407.             this.baseRectangle[3][3].y = (double)1.0F;
  2408.             this.rectangle[0][0].x = (double)0.0F;
  2409.             this.rectangle[0][0].y = (double)0.0F;
  2410.             this.rectangle[0][1].x = this.xMax;
  2411.             this.rectangle[0][1].y = (double)0.0F;
  2412.             this.rectangle[0][2].x = this.xMax;
  2413.             this.rectangle[0][2].y = this.yMax;
  2414.             this.rectangle[0][3].x = (double)0.0F;
  2415.             this.rectangle[0][3].y = this.yMax;
  2416.             double var22 = this.rectangle[0][0].x;
  2417.             double var30 = this.rectangle[0][0].y;
  2418.             double var24 = this.rectangle[0][1].x;
  2419.             double var32 = this.rectangle[0][1].y;
  2420.             double var26 = this.rectangle[0][2].x;
  2421.             double var34 = this.rectangle[0][2].y;
  2422.             double var28 = this.rectangle[0][3].x;
  2423.             double var36 = this.rectangle[0][3].y;
  2424.             this.displayQuadrilateral(var22, var30, (double)0.0F, var24, var32, (double)0.0F, var26, var34, (double)0.0F, var28, var36, (double)0.0F, 6);
  2425.             this.field_1 = 0;
  2426.             this.yOffset = (double)0.0F;
  2427.             this.state = 4;
  2428.             return;
  2429.          case 4:
  2430.             if (this.field_1 > this.maxY) {
  2431.                this.state = 5;
  2432.             } else {
  2433.                for(int var46 = 0; var46 < 4; ++var46) {
  2434.                   this.rectangle[0][var46].x = this.baseRectangle[0][var46].x;
  2435.                   this.rectangle[0][var46].y = this.baseRectangle[0][var46].y + this.yOffset;
  2436.                }
  2437.  
  2438.                for(this.field_0 = 0; this.field_0 <= this.maxX; this.field_0 += 2) {
  2439.                   if (this.computerPage[this.field_1][this.field_0] == 0) {
  2440.                      var13[0].x = this.rectangle[0][0].x;
  2441.                      var13[0].y = this.rectangle[0][0].y;
  2442.                      var13[1].x = this.rectangle[0][1].x;
  2443.                      var13[1].y = this.rectangle[0][1].y;
  2444.                      var13[2].x = this.rectangle[0][2].x;
  2445.                      var13[2].y = this.rectangle[0][2].y;
  2446.                      var13[3].x = this.rectangle[0][3].x;
  2447.                      var13[3].y = this.rectangle[0][3].y;
  2448.                      this.outputLeftRight(var13);
  2449.                   }
  2450.  
  2451.                   for(int var47 = 0; var47 < 4; ++var47) {
  2452.                      ++this.rectangle[0][var47].x;
  2453.                   }
  2454.                }
  2455.  
  2456.                for(int var48 = 0; var48 < 4; ++var48) {
  2457.                   this.rectangle[0][var48].x = this.baseRectangle[0][var48].x;
  2458.                   this.rectangle[0][var48].y = this.baseRectangle[0][var48].y + this.yOffset;
  2459.                }
  2460.  
  2461.                for(int var49 = 0; var49 < 4; ++var49) {
  2462.                   this.rectangle[1][var49].x = this.baseRectangle[1][var49].x;
  2463.                   this.rectangle[1][var49].y = this.baseRectangle[1][var49].y + this.yOffset;
  2464.                }
  2465.  
  2466.                this.field_0 = 0;
  2467.  
  2468.                while(this.field_0 <= this.maxX) {
  2469.                   if (this.computerPage[this.field_1][this.field_0] == 0) {
  2470.                      var13[0].x = this.rectangle[0][0].x;
  2471.                      var13[0].y = this.rectangle[0][0].y;
  2472.                      var13[1].x = this.rectangle[0][1].x;
  2473.                      var13[1].y = this.rectangle[0][1].y;
  2474.                      var13[2].x = this.rectangle[0][2].x;
  2475.                      var13[2].y = this.rectangle[0][2].y;
  2476.                      var13[3].x = this.rectangle[0][3].x;
  2477.                      var13[3].y = this.rectangle[0][3].y;
  2478.                      this.outputRectangle(var13, 7);
  2479.                   }
  2480.  
  2481.                   for(int var50 = 0; var50 < 4; ++var50) {
  2482.                      ++this.rectangle[0][var50].x;
  2483.                   }
  2484.  
  2485.                   ++this.field_0;
  2486.                   if (this.field_0 <= this.maxX) {
  2487.                      if (this.computerPage[this.field_1][this.field_0] == 0) {
  2488.                         var13[0].x = this.rectangle[1][0].x;
  2489.                         var13[0].y = this.rectangle[1][0].y;
  2490.                         var13[1].x = this.rectangle[1][1].x;
  2491.                         var13[1].y = this.rectangle[1][1].y;
  2492.                         var13[2].x = this.rectangle[1][2].x;
  2493.                         var13[2].y = this.rectangle[1][2].y;
  2494.                         var13[3].x = this.rectangle[1][3].x;
  2495.                         var13[3].y = this.rectangle[1][3].y;
  2496.                         this.outputRectangle(var13, 7);
  2497.                      }
  2498.  
  2499.                      for(int var51 = 0; var51 < 4; ++var51) {
  2500.                         ++this.rectangle[1][var51].x;
  2501.                      }
  2502.  
  2503.                      ++this.field_0;
  2504.                   }
  2505.                }
  2506.  
  2507.                ++this.field_1;
  2508.                if (this.field_1 <= this.maxY) {
  2509.                   for(int var52 = 0; var52 < 4; ++var52) {
  2510.                      this.rectangle[3][var52].x = this.baseRectangle[3][var52].x;
  2511.                      this.rectangle[3][var52].y = this.baseRectangle[3][var52].y + this.yOffset;
  2512.                   }
  2513.  
  2514.                   for(this.field_0 = 0; this.field_0 <= this.maxX; this.field_0 += 2) {
  2515.                      if (this.computerPage[this.field_1][this.field_0] == 0) {
  2516.                         var13[0].x = this.rectangle[3][0].x;
  2517.                         var13[0].y = this.rectangle[3][0].y;
  2518.                         var13[1].x = this.rectangle[3][1].x;
  2519.                         var13[1].y = this.rectangle[3][1].y;
  2520.                         var13[2].x = this.rectangle[3][2].x;
  2521.                         var13[2].y = this.rectangle[3][2].y;
  2522.                         var13[3].x = this.rectangle[3][3].x;
  2523.                         var13[3].y = this.rectangle[3][3].y;
  2524.                         this.outputLeftRight(var13);
  2525.                      }
  2526.  
  2527.                      for(int var53 = 0; var53 < 4; ++var53) {
  2528.                         ++this.rectangle[3][var53].x;
  2529.                      }
  2530.                   }
  2531.  
  2532.                   for(int var54 = 0; var54 < 4; ++var54) {
  2533.                      this.rectangle[3][var54].x = this.baseRectangle[3][var54].x;
  2534.                      this.rectangle[3][var54].y = this.baseRectangle[3][var54].y + this.yOffset;
  2535.                   }
  2536.  
  2537.                   for(this.field_0 = 0; this.field_0 <= this.maxX; this.field_0 += 2) {
  2538.                      if (this.computerPage[this.field_1][this.field_0] == 0) {
  2539.                         var13[0].x = this.rectangle[3][0].x;
  2540.                         var13[0].y = this.rectangle[3][0].y;
  2541.                         var13[1].x = this.rectangle[3][1].x;
  2542.                         var13[1].y = this.rectangle[3][1].y;
  2543.                         var13[2].x = this.rectangle[3][2].x;
  2544.                         var13[2].y = this.rectangle[3][2].y;
  2545.                         var13[3].x = this.rectangle[3][3].x;
  2546.                         var13[3].y = this.rectangle[3][3].y;
  2547.                         this.outputRectangle(var13, 7);
  2548.                      }
  2549.  
  2550.                      for(int var55 = 0; var55 < 4; ++var55) {
  2551.                         ++this.rectangle[3][var55].x;
  2552.                      }
  2553.                   }
  2554.  
  2555.                   ++this.field_1;
  2556.                }
  2557.  
  2558.                ++this.yOffset;
  2559.             }
  2560.  
  2561.             if (this.state == 5) {
  2562.                this.alreadyPainting = false;
  2563.                this.sqrDisplayUserMoves();
  2564.                if (this.solutionDisplayed) {
  2565.                   this.sqrDisplaySolution();
  2566.                   return;
  2567.                }
  2568.             }
  2569.       }
  2570.  
  2571.    }
  2572.  
  2573.    public void run() {
  2574.       do {
  2575.          if (this.state < 5) {
  2576.             if (this.hexagonalRooms) {
  2577.                this.hexOutputMaze();
  2578.             } else {
  2579.                this.sqrOutputMaze();
  2580.             }
  2581.          }
  2582.  
  2583.          Thread.yield();
  2584.          if (this.restart) {
  2585.             this.restart = false;
  2586.             this.graph = this.zmazecan.getGraphics().create();
  2587.             this.screen = new Rectangle(this.zmazecan.rectangle.x, this.zmazecan.rectangle.y, this.zmazecan.rectangle.width, this.zmazecan.rectangle.height);
  2588.             this.resize = this.zmazecan.resize;
  2589.             if (this.resize) {
  2590.                this.userHasSolved = false;
  2591.             }
  2592.  
  2593.             this.hexagonalRooms = this.zmazecan.zmaze3d.hexagonalRooms;
  2594.             this.solutionDisplayed = this.zmazecan.zmaze3d.solutionDisplayed;
  2595.             if (this.zmazecan.zmaze3d.clearUserAttempts) {
  2596.                this.clearUserAttempts = true;
  2597.                this.zmazecan.zmaze3d.clearUserAttempts = false;
  2598.                this.userHasSolved = false;
  2599.             }
  2600.  
  2601.             this.tilt = this.zmazecan.zmaze3d.tilt;
  2602.             this.paint = true;
  2603.             this.alreadyPainting = true;
  2604.             this.state = 0;
  2605.          }
  2606.       } while(this.state < 6);
  2607.  
  2608.    }
  2609. }
  2610.